PHP SQL PDO通配符查询

时间:2019-04-30 20:19:21

标签: sql wildcard sql-like

我有一个具有以下值的表:

123, 159, 147, 258, 369

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

159, 147 and 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));

2 个答案:

答案 0 :(得分:1)

您使用的语法在SQL Server中有效,但不适用于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%'

答案 1 :(得分:0)

不确定这是否是您的意图,但是如果您尝试仅从3位数字的池中选择以1或2开头的记录,则可以使用。

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