2012-10-18 145 views
3

我有一些php代碼準備好的語句。它通過javascript中的Ajax調用。我確定帳戶表中有一個名爲mark(無上限)的帳戶,但當我將$ _POST ['query']設置爲m時,它會發現$ stmt-> num_rows === 0爲true。沒有錯誤可以被看到,它只是不起作用!如您所知,它將內容反映到表格中。我在phpMyAdmin中試過這個查詢:SELECT username FROM accounts WHERE username LIKE'%m%'and it worked fine。我創建了這個代碼來搜索一個mysql數據庫的用戶名。如果你想知道,$ conn是包含文件中定義的有效mysqli對象。準備語句mysqli不返回行

<?php 
require_once('./include.php'); 
$stmt=$conn->stmt_init(); 
$stmt->prepare('SELECT username FROM accounts WHERE username LIKE ?'); 
$compquery='%'.$_POST['query'].'%'; 
$stmt->bind_param('s',$compquery); 
$stmt->execute(); 
echo '<tr><td>'; 
if($stmt->num_rows!==0){ 
    $stmt->bind_result($name); 
    while($stmt->fetch()){ 
     echo "$name</td></tr><tr><td>"; 
    } 
    echo '</td></tr>'; 
} 
else 
    echo 'No Results Found</td></tr>'; 
+1

你用'mysqli_stmt :: store_result()'[文件](HTTP:/ /www.php.net/manual/en/mysqli-stmt.store-result.php)? – Passerby

+0

添加錯誤檢查。 – Barmar

+0

你需要引號嗎?在準備好的聲明中? – Dallin

回答

6

從註釋擴展:

你必須使用mysql_stmt::store_result()你可以使用mysqli_stmt::num_rows前:

$stmt=$conn->stmt_init(); 
$stmt->prepare('SELECT username FROM accounts WHERE username LIKE ?'); 
$compquery='%'.$_POST['query'].'%'; 
$stmt->bind_param('s',$compquery); 
$stmt->execute(); 
$stmt->store_result();