2014-02-25 64 views
0

我對準備好的語句很新穎。已準備好的語句導致錯誤

這是我的代碼:

<?php 
$getImages=$db->prepare("SELECT * FROM header_image_arabic"); 
$getImages->bind_param('s', '$images'); 
$getImages->execute(); 
$getImages->bind_result($returned_images); 
while($img=$returned_images->fetch_object()){ 
?> 

這是錯誤:

Fatal error: Cannot pass parameter 2 by reference in C:\wamp\www\arabia\admin\includes\pan\imageHeader.php on line 22`

這個錯誤是什麼意思?

+0

我試試這個太「你的常識」,但我真的不能underst這如果有任何網站,你可以建議請寫它 –

+0

http://www.php.net –

回答

4

這裏有很多錯誤。

'$images'是一個包含7個字符的字符串。您想要將變量傳遞給bind_param,而不是字符串。

$getImages->bind_param('s', $images); 

此外,什麼究竟是你想綁定到這裏?查詢中沒有佔位符(問號)。您可以在這裏使用$db->query()。在填寫數據時,您只需「準備」查詢。

$getImages = $db->query('SELECT * FROM header_image_arabic'); 
if($getImages === FALSE){ 
    die($db->error); 
} 

while($img = $getImages->fetch_object()){ 
} 

另一件事是行:$getImages->bind_result($returned_images);bind_result用於綁定到查詢中的字段。你不能在這裏使用,因爲你在做SELECT *。 (另外,fetch_objectbind_result不能一起使用。你需要使用get_result(僅與mysqlnd驅動程序的工作原理),以能夠使用fetch_object。)

所以,如果你想使用「準備好的語句」 ,它會是這個樣子:

$getImages = $db->prepare("SELECT image_id FROM header_image_arabic WHERE name = ?"); 

$getImages->bind_param('s', $images); 
$getImages->execute(); 
$getImages->bind_result($returned_images); 

while($getImages->fetch()){ 
    // This will get updated each iteration 
    echo $returned_images; 
} 

或像這樣(需要驅動程序mysqlnd):

$getImages = $db->prepare("SELECT * FROM header_image_arabic WHERE name = ?"); 

$getImages->bind_param('s', $images); 
$getImages->execute(); 
$result = $getImages->get_result(); 

while($img = $result->fetch_object()){ 
    echo $img->image_id; 
} 
+0

謝謝你的回覆我正在看這個教程,我錯了把$圖像作爲字符串......但仍然需要理解'準備好的陳述'更好的方式無論如何感謝您的幫助 –

+0

很高興我可以幫助!一旦你知道如何使用它們,準備好的陳述就很好:-) –

+0

再次感謝@Rocket Hazmat現在我明白'準備好的陳述'的用法了,這是我第一次知道它。 順便說一句,這是我的原始代碼 '<?php $ getImages =「SELECT * FROM header_image_arabic」; \t $ QgetImages = $ db-> query($ getImages)或die($ db-> error); \t while($ img = $ QgetImages-> fetch_object()){ \t?> –