使用IN时,php mysql查询匹配表中的所有行

时间:2016-07-17 09:38:49

标签: php mysql

PHP MYSQL

中创建过滤器搜索时获取所有行时遇到问题

例如,我的items表包含以下数据:

域:标题

三星Galaxy

q-mobile S5系列

htc新经典品牌

...

品牌

三星

Q-移动

HTC

...

当用户选择查看所有品牌的数据时,如何获取行?我现在使用的查询是:

$sql = "SELECT * FORM table WHERE title  = '$title' AND brand  = '$brand' LIMIT 0,10";

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用IN()构建一个准备好的语句,如下所示:

  • IN - 子句中的每个元素构建一个包含占位符的数组

  • implode()查询中的占位符数组,由“,”

  • 分隔
  • 创建一个您想在查询中拥有的值数组(第3行,我不知道您接收的是哪种形式的值,但这是您可以使用它们的方式)

  • 执行时将IN - 子句的值与您WHERE - 子句中可能包含的其他参数合并。 确保它们的顺序正确。

代码:

$pdo = new PDO('mysql:host=localhost;dbname=stuff;charset=utf8;', 'root', '');

$brands = array('samsung', 'sony', 'dsf', 'q-mobile');
$title = 'du';

$placeholder = array_fill(0, count($brands), '?');

$placeholderString = implode(',', $placeholder);

$sql = 'SELECT * FROM table 
            WHERE title = ? 
            AND brand IN (' . $placeholderString . ')';

$stmt = $pdo->prepare($sql);
$stmt->execute(array_merge(array($title), $brands));

添加您要查询的数据的验证。