2014-03-03 47 views
0

基本上,它就是標題所說的內容。我通過mysqli-> query進行查詢並且它可以工作。我像這樣對它進行重新說明,它什麼都不做。準備好的語句返回0個元素,手動查詢返回1

$conn = new mysqli('localhost','root','root','test'); 
if (!$conn) { die('Error1');} 

$sql = 'SELECT * FROM test_data WHERE type = ?'; 

$one = 1; 

$ps = $conn->prepare($sql); 
$ps->bind_param('i', $one); 
$ps->execute(); 

$out = ''; 

$ps->bind_result($out); 
print_r($ps); 
echo out; 

$ps->fetch(); 
print_r($ps); 
echo out; 

輸出以下,重複兩次:

mysqli_stmt Object ([affected_rows] => -1 [insert_id] => 0 [num_rows] => 0 [param_count] => 1 [field_count] => 7 [errno] => 0 [error] => [sqlstate] => 00000 [id] => 1) 

有誰知道我可以用它來進一步調試這個?

編輯:這是工作的代碼:

$conn = new mysqli('localhost','root','root','test'); 
if (!$conn) { die('Error1');} 

$sql = 'SELECT * FROM test_data WHERE type = 1'; 

$ps = $conn->query($sql); 

$ps->fetch_assoc(); 

print_r($ps); 

,輸出:

mysqli_result Object ([current_field] => 0 [field_count] => 7 [lengths] => Array ([0] => 1 [1] => 10 [2] => 3 [3] => 1 [4] => 1 [5] => 1 [6] => 2) [num_rows] => 10 [type] => 0) 
+0

什麼是原來那個工作? – OSborn

+0

我對你的代碼有點困惑,你正在用第一個bind_param執行第一個查詢,然後你設置了一個新的bind_param但不執行它,你的'echo'是錯誤的,並且你有'$ ps'因爲沒有變化,所以兩次都會給你同樣的信息。 – Prix

+0

@Prix糟糕。讓我測試一下。 – Albertoni

回答

0

當你使用bind_result,你需要知道你要多少列在你的結果,然後您需要爲結果中的每個列提供一個變量。

我們無法知道結果集應該是什麼樣子,因爲您使用的是SELECT * FROM test_data,但除非test_data只有一列,否則您沒有傳遞足夠的變量。

例如,如果有結果集中3列,你需要的東西,如:

$ps->bind_result($out1, $out2, $out3); 

從那裏,你的print_r($ PS),這當然是對的mysqli對象。我不確定你對此有什麼期望,但沒有理由試圖拋棄該對象。

如果結果集可以有多個行,你需要做一個獲取循環:

while ($ps->fetch()) { 
    echo "$out1, $out2, $out3 <br>"; 
}