2016-07-17 71 views
1

时,我有一个麻烦,同时创造PHP MYSQL过滤搜索所有行PHP MySQL查询匹配使用IN

例如,我的项目表包含下列数据时:

域: 冠军


三星Galaxy

Q-移动S5系列

HTC新经典品牌

...

品牌


三星

Q-移动

HTC

...

我怎样才能得到行时用户选择查看数据,所有的品牌?我现在使用的查询是:

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

谢谢

+0

只要在where条款中不添加品牌,那样它就会考虑所有品牌。 –

+0

@ShrikantMavlankar谢谢。但我必须添加它,因为它是过滤器搜索和搜索许多列,并且不希望在用户为所有类型,品牌等选择数据时使用许多条件。是否还有其他方法? –

+0

只需使用这个:$ sql =“SELECT * FORM table”; – pradeep

回答

0

你可以建立一个事先准备好的声明与IN()这样的:

  • 构建具有占位符中的每个元素的数组条款-clause

  • 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)); 

添加要查询的数据验证。

+0

谢谢。这是帮助完整 –