2014-11-20 118 views
0

我有一個試圖進行wicard搜索的查詢:形式是:%像的mysqli%語句,返回錯誤

<form name="attdate1" action="keyword.php" method="post"> 
    <input type=text name="hs_data" id="hs_data"> 
     <button class ='btn btn-lg btn-danger' type ="submit"> Search Records </button> 
</form> 

的用戶將進入一個詞來搜索對我的數據庫列= HS NV VSA。如果找到匹配,用戶將得到返回的結果(當前在表中)。

當我運行查詢時,我只得到了成功的語句,但沒有結果?我新準備的陳述,已經在這裏得到了一些很好的幫助。任何幫助深表感謝!

我的PHP:

<?php 



$mysqli = new mysqli("localhost", "root", "", "test3"); 

$hs_data=$_POST['hs_data']; 
$nv_data=$_POST['hs_data']; 
$vsa_data=$_POST['hs_data']; 

$query = $mysqli->stmt_init(); 
//create a prepared statement 


$query = "SELECT hs,nv,vsa FROM handover WHERE hs like ? or nv like ? or vsa like ?"; 



$statement = $mysqli->prepare($query); 

    $statement->bind_param('sss',$hs_data,$nv_data,$vsa_data); 

//execute query 
$statement->execute(); 

//bind result variables to be printed 
$statement->bind_result($hs,$nv,$vsa); 

Print "</br></br></br></br></br><p>Your data is printed successfully</p>"; 
print '</br></br></br></br></br><table border="1">'; 

//fetch records 
while($statement->fetch()) { 
print '<tr>'; 
print '<td>'.$hs.'</td>'; 
print '<td>'.$nv.'</td>'; 
print '<td>'.$vsa.'</td>'; 

print '</tr>'; 
} 
print '</table>'; 

//close connection 
$statement->close(); 

當我剛進入一個空白項查詢只在整整兩列。當我說出一個詞我知道存在,除了我的成功消息,我什麼也沒有返回

+0

檢查用於檢索結果的語法 – 2014-11-20 21:28:35

+0

那些列只包含給定的字符串嗎?因爲我知道準備並不會爲你添加%,所以它實際上是在字符串中搜索單詞。 – 2014-11-20 21:38:07

回答

1

您的LIKE比較中沒有任何通配符。通配符,不像是基本上完全一樣使用=

fieldname LIKE 'foo'  identical to  fieldname = 'foo' 

你需要做更多的東西一樣:

$hsa = '%' . $_POST['hs_data'] . '%'; 
查詢

或直接:

WHERE ... hsa LIKE CONCAT('%', ? , '%') 
+0

謝謝馬克的工作 - 就像一個附加組件,如果你有時間我會在哪裏放置一個「沒有結果」。我習慣於用陳舊的SQL語法。 – Creaven 2014-11-20 21:54:29