[英]Prepared statement returns 0 elements, manual query returns 1
基本上就是標題所說的。 我通過mysqli-> query進行查詢,它可以工作。 我這樣改寫它,但它什么也沒做。
$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 )
使用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>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.