簡體   English   中英

准備好的語句導致while循環錯誤

[英]prepared statement causing while loop error

我有以下簡單的mysqli php應用程序,它應該可以正常工作。 $ pk被完美接受,並且是有效的ARTICLE_NO,當直接由mysql執行時,查詢可以完美運行。 我將輸出語句放在每個事件以及執行期間除tetsing之外的所有事件之后。 從不進入while循環,我不確定為什么。

編輯:我已將問題縮小為返回0行的事實,但是我不知道為什么在phpmyadmin中的同一查詢會給出正確的結果。

edit2:如果我擺脫了while循環,只是

    if (!$getRecords->fetch()) {
    printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}

它顯示errno為0。因此,沒有讀取任何記錄,也沒有錯誤,但這是一個有效的查詢。

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
    echo "test inside loop";
    $query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
    if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
        $getRecords->bind_param("i", $pk);
echo "test after bind param";
        $getRecords->execute();
echo "test after bind execute";
        $getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
        while ($getRecords->fetch()) {
            echo "test inside while";
            echo "<h1>".$ARTICLE_NO."</h1>";
        }
    }
}

編輯:

我嘗試使用以下代碼:

<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
    $stmt->bind_param("i", $pk);
    $stmt->execute();
    /* bind variables to prepared statement */
    $stmt->bind_result($col1, $col2);
    /* fetch values */
    while ($stmt->fetch()) {
        printf("%s %s\n", $col1, $col2);
    }
    /* close statement */
    $stmt->close();
}
/* close connection */
$mysqli->close();
?>

這在沒有$ pk的情況下有效,如果我刪除了參數,它將正常工作。 通過GET獲取pk並不是問題,因為如果我分配$ pk = 1; 相反,它仍然會失敗。 1是有效的ARTICLE_NO,如果是SELECT ARTICLE_NAME,則可以從拍賣中觀看,其中ARTICLE_NO = 1 LIMIT 5在phmyadmin中可以正常工作。

編輯:問題是mysqli無法處理bigint,我現在使用k作為字符串,它可以正常工作。

檢查以下值:

$getRecords->num_rows

這應該有助於揭示早期的SELECT是否實際上返回了任何數據

您可能還需要添加:

$getRecords->store_result()

首先,請先確保您已完成整個查詢,然后再詢問結果集中的行數。

另外-確保將$pk轉換為整數! 傳入的值有可能被破壞。

我不確定您是否已修改該代碼,但是您似乎並沒有選擇要連接到那里的數據庫。

如果那是問題,請使用mysqli_select_db(...)。

編輯:它看起來像您正在使用大寫的列,表名稱等。

正確區分大小寫,這可能是因為您在命令行中認為它不區分大小寫。 據我所知,PHP中的mysqlI驅動程序至少對列名區分大小寫。

暫無
暫無

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

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