MySQL准备好的语句在PHP中抛出错误

Posted

技术标签:

【中文标题】MySQL准备好的语句在PHP中抛出错误【英文标题】:MySQL prepared statements throwing error in PHP 【发布时间】:2017-09-15 01:01:10 【问题描述】:

这是连接到我的数据库的代码。我确定用户名、密码和数据库名称是正确的。

$Myconn = mysqli_connect($this->host, $this->user, $this->pass, $this->DBname);

这是准备语句的代码:

$query =$Myconn->prepare("SELECT * FROM `AD` WHERE name=?");
$query->bind_param('s', $AD_Name);
$query->execute();
$query->store_result();
$query->bind_result($id, $name, $price);   

而且我确信我正确发送了$AD_Name 以及我的查询。

我使用了 AMPPS,它在使用我的代码时可以正常工作。

我的问题是当我打印$id$name$price 时,我的结果总是null

【问题讨论】:

【参考方案1】:

Ali Rasheed 是对的,您应该在执行 bind_result() 之后使用 fetch(),但这里有一个更大的问题。您不能将bind_result()SELECT * ... 一起使用。它不能正常工作,因为bind_result() 不知道所选元素的顺序,因此它不知道哪个变量应该得到哪个值。相反,您应该修改为:

$query =$Myconn->prepare("SELECT id, name, price FROM `AD` WHERE name=?");
$query->bind_param('s', $AD_Name);
$query->execute();
$query->store_result();
$query->bind_result($id, $name, $price);
$query->fetch();

当然可以根据需要替换列名。

你可以在这里看到一个很好的解释:https://***.com/a/18753263/2694511

【讨论】:

【参考方案2】:

做完之后

$query->bind_result($id, $name, $price);   

使用

$query->fetch();

【讨论】:

很高兴帮助队友

以上是关于MySQL准备好的语句在PHP中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

php mysqli在嵌套循环中准备语句抛出命令或同步错误[重复]

MySqlDb 在插入忽略语句中抛出操作数应包含 1 列

使用 PDO 准备好的语句 MySQL 错误

运行准备好的语句 (MySQL/PHP)

Pandas 使用 If/Then/Else 语句在循环中抛出错误

让 PHP 的 XMLReader 不会在无效文档中抛出 php 错误