2013-07-26 161 views
-1

不工作我的代碼(如下圖),它使用準備語句將數據插入到DATABSE中的mysqli執行事先準備好的聲明中的mysqli

$stmt = $db_connection->prepare('INSERT INTO accounts (id,name,email,password) VALUES (?,?,?)'); 
$stmt->bind_param('sss', "mukur","hotmail","grapes"); 
$stmt->execute(); 
$stmt->close(); 

當我運行的代碼,我得到了「致命錯誤,在非對象上調用成員函數bid_param()...「 ![輸入圖片說明] [2]

在bind_param部分,我只給了三個's'作爲'id'列是auto -incremented field

我的完整代碼在這裏

enter image description here

回答

0

首先呼叫到prepare()失敗,因爲你的INSERT說法是錯誤的。如果你想有錯誤搬運就位,那麼你會得到這個錯誤信息

列計數不匹配值在第1行

在列列表的列數計數應匹配的數量列在VALUES部分。因此改變

INSERT INTO accounts (id,name,email,password) VALUES (?,?,?) 
         ^^^ 

INSERT INTO accounts (name,email,password) VALUES (?,?,?) 

其次bind_param()結合變量到標記物,這意味着它需要以引用的方式傳遞的參數。因此,您的代碼應該看起來像這樣

$db = new mysqli('localhost', 'user', 'password', 'dbname'); 
if ($db->connect_errno) { 
    die('Connection failed: %s\n' . $db->connect_error); //TODO better error handling 
} 

$sql = 'INSERT INTO accounts (id, name,email,password) VALUES (?,?,?)'; 
$stmt = $db->prepare($sql); 
if (!$stmt) { 
    die('Can\'t prepare: ' . $db->error); //TODO better error handling 
} 

$name  = 'mukur'; 
$email = 'hotmail'; 
$password = 'grapes'; 

$stmt->bind_param('sss', $name, $email, $password); 
$stmt->execute(); 
$stmt->close(); 
$db-close(); 
+0

改變了代碼,但仍得到相同的錯誤 – Zafta

+1

@Mukurpuri嘗試改變你的代碼,我建議包括錯誤處理。如果您在發佈後發現錯誤, – peterm

+0

thanx peterm,錯誤實際上是我愚蠢的錯誤,但你的回答真的幫了我。 – Zafta

0

請使用以下更改。

$stmt = $db_connection->prepare('INSERT INTO accounts (name,email,password) VALUES (?,?,?)');

$stmt->bind_param("mukur","hotmail","grapes");