[英]PHP: PDO MySQL error
我真的不知道 MySQL,但我嘗試。
我在 PHP 中有這個腳本
$sql = $DB->prepare("INSERT INTO `users`(`id`, `firstname`, `lastname`, `email`, `password`) VALUES ($this->firstname, $this->lastname, $this->email, $this->password))");
當我使用
print_r($sql->errorInfo());
它給了我這個錯誤
警告:PDOStatement::execute(): SQLSTATE[HY093]: 無效的參數號:沒有參數被綁定在 C:\\Bitnami\\wampstack-5.5.27-0\\apache2\\htdocs\\OOPLogin\\register.php on line 115 Array ( [0] => HY093 [1] => [2] => )
如果有人能幫助我,我將不勝感激。
謝謝你。
編輯:我把它改成
$sql = $DB->prepare("INSERT INTO `users`(`firstname`, `lastname`, `email`, `password`) VALUES ($this->firstname, $this->lastname, $this->email, $this->password))");
現在它給了我
Array ( [0] => 42000 [1] => 1064 [2] => 您的 SQL 語法有錯誤;請檢查與您的 MySQL 服務器版本相對應的手冊,以獲取在 '@gmail.com 附近使用的正確語法, ff0b80f26259f9c0178aeed5198bac48))' 在第 1 行)
假設您使用 PDO,您需要使用准備好的語句綁定參數。
這是一個示例,使用PDO::prepare
文檔作為參考:
$statement = $DB->prepare("INSERT INTO `table` (`id`) VALUES (?)");
$statement->execute(array($user_id));
使用mysqli
作為替代的其他示例...
$statement = $DB->prepare("INSERT INTO `table` (`id`) VALUES (?)");
$statement->bind_param("i", $user_id);
$statement->execute();
您需要綁定每個參數,而不是將它們內聯准備好的語句。
您濫用了prepare()
函數。 使用准備好的語句時,您應該使用?
或:name
作為您的值的占位符。 這可以防止您從用戶輸入構建惡意 SQL 查詢。
此外,您列出了 5 個字段,但只給出了 4 個值。 如果id
是一個AUTO_INCREMENT
字段,那么它可以從查詢中省略。
最后,您的查詢中有太多)
,
$sql = $DB->prepare("INSERT INTO `users`(`firstname`, `lastname`, `email`, `password`)
VALUES (:firstname, :lastname, :email, :password)");
現在您只需將一組值傳遞給execute()
以綁定到占位符。
$sql->execute(array(
'firstname' => $this->firstname,
'lastname' => $this->lastname,
'email' => $this->email,
'password' => $this->password
));
PS 您的原始代碼不起作用,因為您忘記在字符串周圍加上引號。
INSERT INTO `users` (`email`) VALUE ('test@example.com');
您的 ID-column 沒有相應的值可以插入,如果該列是 auto-incrementint,您可以跳過它,如下所示:
$sql = $DB->prepare("INSERT INTO `users`(`firstname`, `lastname`, `email`, `password`) VALUES ($this->firstname, $this->lastname, $this->email, $this->password))");
您需要插入的值與列數一樣多
插入查詢需要在表字段和值中以相同的順序具有相同的參數。
所以,如果你有id
, firstname
, lastname
, email
, password
你需要有idValue
, firstnameValue
, lastnameValue
, emailValue
, passwordValue
嘗試查詢是否格式良好的一個好方法是執行echo $sql
或var_dump($sql)
並將結果粘貼到諸如 Mysql Workbench 或 HeidiSql 之類的 sql ID 查詢上
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.