2012-07-28 117 views
1

我在我的數據庫中有兩個表。當我執行下面的PHP腳本時,我收到錯誤。我認爲查詢是正確的,但我怎麼綁定參數錯誤?mysqli綁定參數的錯誤

Display 
+-------+------------+-------------+ 
| Index | DISPLAY_ID | Picture_ID | 
+-------+------------+-------------+ 
|  1 |   12 | longblob | 
+-------+------------+-------------+ 

Cards 
+--------+------------+------------+-----------------+ 
| Card_ID| DISPLAY_ID | Card_Type | Card_name  | 
+--------+------------+------------+-----------------+ 
|  |   |   |     | 
+--------+------------+---------=--+-----------------+ 

<?php 
$mysqli=mysqli_connect('localhost','root','','draftdb'); 
if (!$mysqli) 
die("Can't connect to MySQL: ".mysqli_connect_error()); 


$stmt = $mysqli->prepare("SELECT cards.CARD_TYPE, display.PICTURE_ID 
FROM cards 
INNER JOIN display ON cards.DISPLAY_ID = display.DISPLAY_ID 
WHERE display.DISPLAY_ID=? AND cards.CARD_TYPE =?"); 


$displayid=11; 
$cardtype='Mythic'; 

$stmt->bind_param("si", $displayid, $cardtype); 
$stmt->execute(); 
$stmt->bind_result($image); 
$stmt->fetch(); 
//header("Content-Type: image/jpeg"); 
echo $image; 
?> 

警告:mysqli_stmt :: bind_result():綁定變量的數目不

匹配事先準備好的聲明字段數

修復:如果您正在從數據庫讀取圖片,請確保只返回查詢中的斑點數據。 (從SELECT語句中刪除cards.CARD_TYPE。)

+0

的功能令'準備() - > bind_param() - >執行()' – diEcho 2012-07-28 05:22:55

回答

4

嘗試這兩種解決方法:

  • 擺脫:if (!$mysqli->query($stmt)) { printf("Errormessage: %s\n", $mysqli->error); }
    當你調用​​
  • 您需要綁定2個參數執行查詢時,你傳遞了兩個,但只列出一個類型。更改bind_param呼籲:
    $stmt->bind_param("si", $cardtype, $displayid); // s for string, i for int

編輯:嘗試的代碼更改爲此:

$stmt = $mysqli->prepare("SELECT cards.CARD_TYPE, display.PICTURE_ID 
FROM cards 
INNER JOIN display ON cards.DISPLAY_ID = display.DISPLAY_ID 
WHERE display.DISPLAY_ID=? AND cards.CARD_TYPE =?"); 


$displayid=11; 
$cardtype='Mythic'; 

$stmt->bind_param("is", $displayid, $cardtype); 
$stmt->execute(); 
+0

仍然給我綁定變量的數量不匹配。我認爲問題出在查詢中。 – Undermine2k 2012-07-28 05:32:17

+0

@ Undermine2k看到我的編輯,我相信查詢也有問題。 – drew010 2012-07-28 05:36:39

+0

我用我傳過來的參數在myphpadmin中測試了查詢,它返回正確的數據。但運行查詢仍然會給出「綁定變量的數量與準備語句中的字段數量不匹配」。 – Undermine2k 2012-07-28 05:46:33

3

您不應該先執行查詢。準備好後,綁定這些值然後執行它。這就是你必須做的。

在您的綁定參數中,您必須使用「si」,因爲您有兩個值正在傳遞。

+1

'si'應該更好 – 2012-07-28 05:22:59

+0

抱歉的錯字..感謝指出:) – 2012-07-28 05:24:05