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]'
我有一个 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]'