[英]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);。 執行后。 這似乎已經解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.