Mysql IN对字符串,整数和PDO的行为有所不同

时间:2017-11-14 00:21:01

标签: php mysql pdo

我正在更新旧的PHP脚本以使用PDO,我在复制原始行为时遇到了麻烦。

这个问题似乎与IN比较的一个简洁的小功能有关,不能用于字符串。

鉴于此表:

CREATE TABLE `my_categories` (
  `name` VARCHAR(255) NULL,
  `categories` VARCHAR(255) NULL);

INSERT INTO my_categories (name, categories) VALUES
('Joe', '575'),
('Bob', '576'),
('Jim', '577'),
('Daisy','576,577'),
('Billy','576,597');

我可以使用以下SQL来根据需要匹配所有行:

SELECT * as test FROM my_categories WHERE categories IN (575,576,577) 
 name   categories
 Joe    575
 Bob    576
 Jim    577
 Daisy  576,577
 Billy  576,597

但是,只要稍加修改,Daisy和Billy就会从结果中删除:

SELECT * as test FROM my_categories WHERE categories IN ('575','576','577')
 Joe    575
 Bob    576
 Jim    577

我的问题是我无法使用PDO中的预准备语句在第一个测试中复制结果。

为什么行为不同,如何从准备好的语句中获取该功能,是否有更好的方法来比较“哑”逗号分隔列表以匹配所有给定的测试用例?

Mysql小提琴: http://sqlfiddle.com/#!9/798faa/2

0 个答案:

没有答案