这有点奇怪...我正在使用具有绑定结果的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中指定为空
如果我回显一个longnote字段,结果就是无法识别的胡言乱语。
有什么想法吗?这可能是我想念的简单事情。
答案 0 :(得分:0)
最后解决了这个问题。
这是长文本字段的异常。我的FILEATT.LONGNOTE字段是longtext,输出只是垃圾,它把页面的其余部分扔掉了。您必须使用mysqli_stmt_store_result($ stmt);。执行后。看来已经解决了问题。
请参见Prepared mysqli select statement on longtext field is coming back empty