2013-08-30 138 views
29

我如何使用mysqli用LIKE進行查詢並獲取所有結果?php mysqli準備好的語句LIKE

這是我的代碼,但它不到風度工作:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 
$stmt->fetch(); 

此代碼它似乎並沒有工作。我搜查了很多。 也可能會返回多於1行。 那麼即使返回多於一行,我如何得到所有的結果呢?

+1

請定義「不起作用」 - PHP錯誤? MySQL錯誤?沒有錯誤,但0結果? –

+0

我想遍歷所有結果。我怎樣才能做到這一點? 當我說不起作用。它不會返回任何內容... – user2493164

+0

此代碼中沒有返回運算符。 **如何它應該返回任何東西?** –

回答

48

這裏是你如何正確地獲取結果

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 

while ($stmt->fetch()) { 
    echo "Id: {$id}, Username: {$username}"; 
} 

,或者你也可以這樣做:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_NUM)) { 
    foreach ($row as $r) { 
    print "$r "; 
    } 
    print "\n"; 
} 

我希望你知道我是直接從手動herehere得到的答案,這就是你應該先走了。

+2

在防衛的OP,手冊頁都沒有提到LIKE比較「功能」 –

21

作爲替代給出答案上面,你也可以使用MySQL CONCAT功能這樣的:

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

這意味着你不需要編輯您的$param價值,但確實會使稍長查詢。

+0

嗨連接安全從SQL注入?我在問,因爲它有引號。謝謝 –

+0

@mikevorisis是的,它是安全的,因爲查詢仍然是參數化的(*使用'''*)。引號是因爲MySQL正在CONCATenating三個字符串。 – Martin

+0

好的,謝謝@Martin –