2012-04-01 59 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