使用PHP PDO语句的SQL通配符charlist

时间:2013-05-31 03:57:33

标签: php mysql pdo wildcard

我创建了一个将搜索范围的值发送到数据库的表单,但它似乎没有工作。

查询:

$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>

1 个答案:

答案 0 :(得分: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

以下是LIKEREGEXP

SQLFiddle 演示