2013-05-31 47 views
0

我創建了一個將搜索範圍的值發送到數據庫的表單,但它似乎沒有工作。使用PHP PDO語句的SQL通配符charlist

查詢:

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members WHERE resultselect=? AND lname LIKE ?;"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid,"[".$alpha."]%")); 

形式:

<form action="" method="post"> 
    <button class="btn btn-link" value="abc" name="alpha">A-B-C</button> 
    <button class="btn btn-link" value="def" name="alpha">D-E-F</button> 
</form> 
+0

演示(MySQL和SQL服務器,Oracle ......)? – peterm

+0

我正在使用mysql –

回答

0

既然你正在使用MySQL,你可以使用REGEXP

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members WHERE resultselect=? AND lname REGEXP ?;"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid,"^[".$alpha."]")); 

隨着LIKE查詢應該像

SELECT * FROM tbl_members 
WHERE resultselect=? 
    AND (lname LIKE 'a%' 
    OR lname LIKE 'b%' 
    OR lname LIKE 'c%') 

因此,在這種情況下,你的PHP代碼可能是(假設你隨時搜索使用三個字符)

$alpha = $_POST['alpha']; 
$sql = "SELECT * FROM tbl_members 
     WHERE resultselect=? AND lname (lname LIKE ? OR lname LIKE ? OR lname LIKE ?);"; 
$q = $conn->prepare($sql); 
$q->execute(array($categoryid, $alpha[0].'%', $alpha[1].'%', $alpha[2].'%')); 

要訂購的結果集按字母順序使用ORDER BY lname

這裏是SQLFiddle什麼是您使用RDBMS兩個LIKEREGEXP

+0

謝謝peterm。我希望結果是以字母順序顯示名稱。我仍然是mysql中的新手。REGEXP和LIKE之間的差別在於,似乎給了我想要的東西。 –

+0

另外我嘗試了類似和正則表達式,但它似乎沒有按字母順序顯示結果集。 –

+0

@CharlesOkaformbah查看「LIKE」和「REGEXP」以及sqlfiddle演示文檔鏈接的更新答案。最終都是模式匹配的手段,但'LIKE'是非常基本的,並且僅限於兩個通配符'%'和'_'。使用'REGEXP',您可以使用更復雜的正則表達式。這是你選擇使用什麼。我舉了兩個例子。最終結果將是相同的。 – peterm