【问题标题】:SQL wildcard charlist using PHP PDO statement使用 PHP PDO 语句的 SQL 通配符字符列表
【发布时间】:2013-05-31 03:57:33
【问题描述】:

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

查询:

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

【问题讨论】:

  • 您使用的是什么 RDBMS(MySql、SQL Server、Oracle ...)?
  • 我正在使用mysql

标签: php mysql pdo wildcard


【解决方案1】:

由于您使用的是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

这是LIKEREGEXPSQLFiddle演示

【讨论】:

  • 谢谢彼得。我希望结果基于名称的字母顺序显示。我还是mysql的新手。REGEXP和LIKE cos之类的有什么区别,好像给了我想要的。
  • 我也用like和regexp尝试过,但似乎没有按字母顺序显示结果集。
  • @CharlesOkaformbah 查看LIKEREGEXP 的文档链接以及sqlfiddle 演示的更新答案。最终两者都是模式匹配的手段,但LIKE 是非常基本的并且仅限于两个通配符% 和'_'。使用REGEXP,您可以使用更复杂的正则表达式。使用什么是你的选择。我举了两个例子。最终结果将是相同的。
  • @CharlesOkaformbah 为了获得结果,您需要使用ORDER BY 子句,它与LIKEREGEXP 无关。您在问题中发布的查询缺少它。因此,只需在查询末尾添加 `ORDER BY lname`。
  • @CharlesOkaformbah 更新了 sqlfiddle 以显示ORDER BY的使用
猜你喜欢
  • 2013-04-21
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2021-05-24
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多