2012-04-01 62 views
0
$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执行’调用mysqli准备不会取数据

+0

这是正常的.... – dynamic 2012-04-01 21:13:52

回答

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.执行它!

我不明白为什么这是相关的在你的情况下,与这样一个简单的查询。我也假设你真的需要它来做更大的事情。 如果我误解了您的观点或代码示例,请让我知道。

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

+0

谢谢,一些睡眠后,一切似乎都清晰可辨。不知道我在哪里可以在执行中使用参数,我非常肯定它的语法。 – Kahunar 2012-04-02 09:45:23

+0

最近几天,我努力获得MySQL查询的工作,并在4-5小时浪费后去睡觉。我5小时后醒来,并在约10分钟内解决了问题。 这是一个常见问题,不用担心。 '原力与你同在!' – 2012-04-02 17:40:53

0

打开你的错误报告

你得到一个致命的。通过访问方法execute您的mysqli ::语句之后准备失败的错误检查$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来代替。

+0

谢谢,是的我肯定会! $数据在准备语句中没有得到错误的值,因为我也检查了它。不知道为什么。也感谢链接! – Kahunar 2012-04-02 09:50:20

+0

只是为了记录:我假定你正在使用'mysqli',因为你的变量被称为'$ mysqli'。另一方面,你的命令表明你实际上想要使用PDO。命名参数仅在PDO中可用。请检查您是否使用正确的扩展名,因为它们在创建和执行语句方面存在差异。 – Basti 2012-04-02 09:52:46