2012-07-18 40 views
0

我想設置我的數據庫與準備好的語句處理,但我有點卡住了。我沒有得到任何錯誤味精工作,數據沒有放入數據庫。我有點害怕,這只是一個愚蠢的錯誤,但我希望你能幫助我。mysql準備語句,無論是錯誤或數據分貝

我使用PHP與MySQL數據庫。

下面你可以看到創建一個人的功能。 getConnection()將打開數據庫連接到變量$ link,並在沒有錯誤發生時返回true。

public function createUser($userName, $password) 
{ 
    if($this->getConnection() === true) { 
     $stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)'); 
     mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password); 
     mysqli_stmt_execute($stmt); 
     mysqli_stmt_close($stmt); 
    } 
    $this->link->close(); 
} 

如果你有一個想法,什麼錯,我會更高興。我願意開口。

在此先感謝

/Pyracell

+0

爲什麼插入值的所有問號? – DrinkJavaCodeJava 2012-07-18 19:50:09

+2

那麼,它可能不會返回錯誤,因爲您沒有告訴它返回錯誤。在你的'execute'命令後加上'mysqli_error($ stmt)',看看有沒有什麼。 – Palladium 2012-07-18 19:50:22

+0

@ redelman431據我所知,這是準備好陳述的想法。至少從我見過的例子來看。 – Pyracell 2012-07-18 19:54:57

回答

2

的MySQLi如果一個MySQL查詢失敗不會總是拋出一個錯誤,所以如果事情不工作,你就必須檢查在什麼去的每一步錯誤。爲此mysqli_error()mysqli_stmt_error()是你的朋友。

由於錯誤檢查的矯枉過正例子(用於調試的目的,也可能是,一旦你工作的事情縮減),是這樣的:

public function createUser($userName, $password) 
{ 
    if($this->getConnection() === true) { 
     $stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)'); 
     if ($stmt != FALSE) { 
      $bind = mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password); 
      if ($bind == FALSE) { 
       echo 'Bind failed: '.mysqli_stmt_error($stmt);    
      } else { 
       $exec = mysqli_stmt_execute($stmt); 
       if ($exec == FALSE) { 
        echo 'Execute failed: '.mysqli_stmt_error($stmt); 
       } 
      } 
      mysqli_stmt_close($stmt); 
     } else { 
      echo 'Prepare failed: '.mysqli_error($this->link); 
     } 
    } else { 
     echo 'Failed connecting to database: '.mysqli_connect_error(); 
    } 
    $this->link->close(); 
} 
+1

謝謝約翰C.工作像一個魅力。我的函數散列密碼由於會話而失敗,並返回「null」而不是哈希串。我的數據庫中的密碼字段不能爲false,因此執行失敗。非常感謝。 – Pyracell 2012-07-19 07:34:45