PHP SQL PDO通配符查询

PHP SQL PDO Wildcard query

我有一个 table 具有这些值:

123, 159, 147, 258, 369

我需要找到同时包含1和2但不包含3的数据。结果应该是:

159, 147, 258

我尝试了通配符运算符 % - [] 但没有成功。

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

$sql = "SELECT * FROM numbers WHERE track LIKE '%[12]%' AND track NOT LIKE '%[3]%'";
$q = $conn->prepare($sql);
$q->execute(array($title));

您使用的语法适用于 SQL 服务器,但不适用于 MySQL。您可以使用 REGEXP:

WHERE track REGEXP '[12]'
AND track NOT LIKE '%3%'

或者直接使用LIKE:

WHERE (track LIKE '%1%' OR track LIKE '%2%')
AND track NOT LIKE '%3%'

不确定这是否是您的意图,但如果您只想 select 从 3 位数字的池中以 1 或 2 开头的记录,这将起作用。

SELECT * FROM numbers WHERE track LIKE '%1[0-9][0-9]' OR track LIKE '%2[0-9][0-9]'