$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“。
答案 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代替。