使用mysqli调用prepare不会获取数据

时间:2012-04-01 21:12:20

标签: php mysqli execute prepare

$data = $mysqli->prepare("SELECT amount FROM items WHERE id=:id");
echo 'forward1';
if(!$data->execute(array(':id' => $id)))
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Losing my mind'.$row->amount);

这只会回显“forward1”,而不是“执行错误...”或“2”。它适用于* $ mysqli->查询“。如果我在查询中添加引号':id,它将回显”forward1error execution“。

2 个答案:

答案 0 :(得分:1)

首先,确保您了解准备好的语句语法和工作模型。

如:

$data = $mysqli->prepare("SELECT amount FROM items WHERE id=(?)");
            // THIS ^^ actually "prepares" an object to be used in the statement
$data->bind_param("i",$id)
            // ...then you "bind" the parameter for your statement as "i"(nteger)
echo 'forward1';
if(!$data->execute())  // And now you simply run it, with no other args
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Loosing my mind'.$row->amount);

我建议使用更像

的东西
$data->execute() or die("error executing".$data->error);

准备声明的主要步骤是: 1.使用一些占位符值准备查询; 2.将所需数量的值“绑定”到查询中; 3.执行它!

通过这样一个简单的查询,我无法确定为什么这与您的情况相关。我还假设你实际上需要更大的东西。 如果我误解了你的观点或代码样本,请告诉我。

哦,而且......玩得开心! : - )

答案 1 :(得分:0)

启用错误报告功能。

准备失败后,通过访问mysqli :: statement上的方法execute会出现致命错误。在致电$data === false之前,请先检查execute

错误讯息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':id' at line 1

请参阅此答案,了解触发此错误的原因:MYSQLI::prepare() , error when used placeholder :something

请参阅PHP manual了解如何使用mysqli,或使用PDO代替。