繁体   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