簡體   English   中英

MySQLi帶通配符的預處理語句的奇怪結果(過程)

[英]Strange Results from MySQLi Prepared Statement With Wildcard (Procedural)

這有點奇怪...我正在使用具有綁定結果的mysqli准備的語句(包括通配符),但是盡管SQL語句在phpmyadmin中有效,但是我無法在php文件中正確輸出它。

誰能發現我在做什么錯?

$servername = "XXXX"; $username = "XXXX"; $password = "XXXX"; $dbname = "XXXX";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (!isset($_GET['searchfield'])) {
    $query_string = NULL;
} else {
    $query_string = $_GET['searchfield'];
}

$stmt = mysqli_prepare($conn, "
SELECT CONTACTS.CONTACTID, CONTACTS.COMPANY, CONTACTS.FORENAME, 
CONTACTS.SURNAME, CONTNOTES.NOTESID, CONTNOTES.NOTESCONTACTID, 
FILEATT.ATTNOTEID, FILEATT.LONGNOTE, FILEATT.CREATEDATE
FROM CONTACTS
INNER JOIN CONTNOTES
   ON CONTACTS.CONTACTID = CONTNOTES.NOTESCONTACTID
INNER JOIN FILEATT
   ON CONTNOTES.NOTESID = FILEATT.ATTNOTEID
WHERE FILEATT.LONGNOTE LIKE CONCAT('%',?,'%')
ORDER BY FILEATT.CREATEDATE ASC
");

mysqli_stmt_bind_param($stmt, "s", $query_string);// bind parameters
mysqli_stmt_execute($stmt);// execute query
mysqli_stmt_bind_result($stmt, $CONTACTID, $COMPANY, $FORENAME, $SURNAME, $NOTESID, $NOTESCONTACTID, $ATTNOTEID, $LONGNOTE, $CREATEDATE);
$rowcount = mysqli_stmt_num_rows($stmt);

if($rowcount > 0){

    while (mysqli_stmt_fetch($stmt)) {

        echo stuff i.e $COMPANY;
    }

}

mysqli_stmt_close($stmt);
mysqli_close ($conn);

首先,我沒有在$ rowcount中獲得價值

其次,如果我注釋掉if($ rowcount> 0){,那么在拋出錯誤之前似乎要遍歷2行(應該有數百行):

警告:mysqli_stmt_fetch()期望參數1為mysqli_stmt,在filename.php中給定null

如果我回顯一個longnote字段,結果就是無法識別的胡言亂語。

有任何想法嗎? 我可能錯過了一些簡單的事情。

終於解決了。

這是長文本字段的異常。 我的FILEATT.LONGNOTE字段是longtext,輸出只是垃圾,它把頁面的其余部分扔掉了。 您必須使用mysqli_stmt_store_result($ stmt);。 執行后。 這似乎已經解決了問題。

請參見長文本字段上的准備好的mysqli select語句返回空

暫無
暫無

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

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