簡體   English   中英

PHP:PDO MySQL 錯誤

[英]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 $sqlvar_dump($sql)並將結果粘貼到諸如 Mysql Workbench 或 HeidiSql 之類的 sql ID 查詢上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM