2011-07-11 77 views
1

我已經創建了一個簡單的mySQL數據庫,我試圖插入一些測試數據到它使用PHP。當我跑在Firefox的方法,我得到了以下信息,我不能解決此問題:無法插入數據庫使用php與PDO :: execute()

警告:PDOStatement對象::執行()[pdostatement.execute]:SQLSTATE [HY093]:無效的參數號:

我插入樣品到我DATEBASE方法是:

public function confirmInsert(){ 
    $admin="admin"; 
    $pass="12345v"; 
    $mail="[email protected]"; 
    $insertSQL = "INSERT INTO 'users' ('user_name', 'user_pass, 'user_email') 
      VALUES (
        :admin, 
        :pass, 
        :mail)"; 
    try { 

     $stmt = $this->db->prepare($insertSQL); 
     $stmt ->bindParam(':user_name',$admin, PDO::PARAM_STR); 
     $stmt ->bindParam(':user_pass', $pass, PDO::PARAM_STR); 
     $stmt->bindParam(':user_email', $mail,PDO::PARAM_STR); 
     $stmt->execute(); 
     $stmt->closeCursor(); 
     return TRUE; 
     } catch (Exception $e) { 
      $e -> getMessage(); 
     } 
} 

我就//本地主機上運行,​​並使用Apache 2.2和PHP 5.2.17。謝謝!!

+0

你有一個無與倫比的開幕單引號:''user_pass' – icktoofay

+0

@icktoofay:甚至更多 - 根本不應該有單引號,但反引號(或什麼都不) – zerkms

回答

3

'在查詢中以及綁定它們時,您的參數名稱不同。您還必須刪除查詢中字段名稱周圍的引號。

應該是這樣更好:

public function confirmInsert(){ 
    $admin='admin'; 
    $pass='12345v'; 
    $mail='[email protected]'; 
    $insertSQL = "INSERT INTO users (user_name, user_pass, user_email) 
      VALUES (
        :admin, 
        :pass, 
        :mail)"; 
    try { 

     $stmt = $this->db->prepare($insertSQL); 
     $stmt ->bindParam(':admin',$admin, PDO::PARAM_STR); 
     $stmt ->bindParam(':pass', $pass, PDO::PARAM_STR); 
     $stmt->bindParam(':mail', $mail,PDO::PARAM_STR); 
     $stmt->execute(); 
     $stmt->closeCursor(); 
     return TRUE; 
     } catch (Exception $e) { 
      $e -> getMessage(); 
     } 
} 
+0

感謝您的答覆。 – zman

+0

與您的更改,它確實擺脫了錯誤消息,但它仍然沒有插入任何東西到數據庫中。您可以在準備字符串中看到的列名是:'user_name','user_pass,'user_email'。當分別與bindParam,admin,pass,mail綁定時,我們是否在更改列名? – zman

+0

沒有列名保持不變,你在引號的用法中添加一些錯誤,我已經更新了我的答案 –

0

我還沒有做出評論的權利,所以我必須張貼此作爲一個答案..

R.E. Pompom6784的答案,使用bindParam()變量名不需要匹配參數:

$stmt->bindParam(':user_name', $admin, PDO::PARAM_STR); 

應該只是罰款。

要綁定:user_name接受名爲$admin

..如果這個變量使事情更清楚一點。

如果你想在這個題目一些更多的信息,這裏是一個很好的文章,通讀:

Why you Should be using PHP’s PDO for Database Access

它包括的例子,其中就需要有匹配的變量和佔位符名稱。