我正在开发一个PDO功能,允许您根据工具的序列号或文章ID执行搜索。但是我希望能够同时使用" - "例如,在我的搜索栏459999-1中写入id_art和num_serie之间。
我试图放一个" - "但没有结果
public static function findAllByIdArt($id){
$id='%'.$id.'%';
$c=base::getConnection();
$query=$c->prepare("select * from outillage where (id_art like :num_serie) or (num_serie like :num_serie) or (num_serie and id_art like :num_serie '-' :id_art)");
$query->bindParam(':num_serie',$id,PDO::PARAM_INT);
$query->bindParam(':id_art',$id,PDO::PARAM_INT);
$dbres=$query->execute();
$d=$query->fetchAll();
$tab=array();
foreach ($d as $key => $value) {
$a=new Outillage();
$a->id=$value['id'];
$a->num_serie=$value['num_serie'];
$a->id_art=$value['id_art'];
$a->article=$value['article'];
$a->id_doc=$value['id_doc'];
$a->document=$value['document'];
$a->ilot=$value['ilot'];
$a->emplacement=$value['emplacement'];
$a->liste_tubes=$value['liste_tubes'];
$a->image=$value['image'];
$a->image2=$value['image2'];
$a->image3=$value['image3'];
$a->image4=$value['image4'];
$a->image5=$value['image5'];
$a->nb_utilisation=$value['nb_utilisation'];
$a->conforme=$value['conforme'];
$a->dateNonConfo=$value['dateNonConfo'];
$tab[]=$a;
}
return $tab;
}
答案 0 :(得分:0)
声明的最后部分必须如下:
(num_serie like :num_serie '-' :id_art and id_art like :num_serie '-' :id_art)"
列必须后跟值。你不能使用column1 and column2 like value
答案 1 :(得分:0)
有两点需要注意:
num_serie and id_art
,您需要明确说明列应该查找的值,而不是一系列列。所以它应该是num_serie LIKE 'a' AND id_art LIKE 'a'
,例如。CONCAT()
函数来结束破折号。这是最好的方法,因为您在查询中使用占位符(正如您应该做的那样!)如果我正确理解了您的问题,那么此查询就是这样做的。
SELECT *
FROM outillage
WHERE (id_art LIKE :num_serie)
OR (num_serie LIKE :num_serie)
OR (CONCAT(num_serie, '-', id_art) LIKE CONCAT(:num_serie, '-', :id_art))
此外,在没有任何通配符的情况下执行LIKE
,您也可以使用等号[{1}}而不是=
运算符来正常比较字符串。