簡體   English   中英

准備好的語句返回0個元素,手動查詢返回1個

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM