簡體   English   中英

PHP MySQLi准備的語句fetch()返回'1'而不是查詢結果

[英]PHP MySQLi prepared statement fetch() returns '1' instead of result from query

當我在不支持get_result()的服務器上執行以下代碼時,$ results將返回為“ 1”。 似乎$ stmt-> fetch()無法正常工作。 我做錯什么了嗎?

我使用GoDaddy共享主機帳戶和本地服務器作為測試環境。 我的本地服務器支持get_result(),從而可以正常工作。

$stmt = self::$conn->prepare($sql);

$ex = $stmt->execute();

$stmt->store_result();

if (method_exists($stmt, 'get_result'))
{
    $results = $stmt->get_result();
}
else
{
    $results = $stmt->fetch();
}

盡管PHP代碼庫確實不一致,但是使用兩個不同的函數返回相同的值仍然沒有什么意義。 因此,我們可以得出結論,fetch()返回的內容與get_result()不同。 得出結論,我們可以使用手冊頁驗證我們的假設。 並找到fetch()的正確用法

如果這是mysqli,則需要對fetch()使用綁定結果

 /* bind result variables */
    $stmt->bind_result($name, $code);

    /* fetch values */
    while ($stmt->fetch()) {
        printf ("%s (%s)\n", $name, $code);

http://www.php.net/manual/zh/mysqli-stmt.fetch.php

mysqli_stmt::fetch返回布爾值,並且它們不接受任何參數。 您可以在文檔中清楚地看到它。 如果您需要傳遞sql語句,則mysqli_stmt_fetch是您的函數,該函數接受mysqli_stmt作為參數。

你應該用

 $stmt->bind_result($field1, $field2);
    while($stmt->fetch()){
     $result[] = array($field1,$field2);
    }

您可以在這里找到更多信息

我使用以下代碼解決了我的問題:

$stmt = self::$conn->prepare($sql);

$ex = $stmt->execute();

$stmt->store_result();

$results = array();
$allResults = array();
$params = array();

$meta = $stmt->result_metadata();
if ($meta)
{
    while ($field = $meta->fetch_field())
    {
        $allResults[$field->name] = null;
        $params[] = &$allResults[$field->name];
    }
    call_user_func_array(array($stmt, 'bind_result'), $params);
}

while ($stmt->fetch())
{
    $results[] = $allResults;
}

$stmt->free_result();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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