需要帮助 PHP PDO 准备 SQL



我正在开发一个PDO函数,它允许您根据工具的序列号或物品ID执行搜索。但是,我希望能够在id_art和num_serie之间同时使用"-"搜索两者,例如在我的搜索栏 459999-1 中写道。

我试图输入"-"但没有结果

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;
}

语句的最后一部分必须如下所示:

(num_serie like :num_serie '-' :id_art and id_art like :num_serie '-' :id_art)"

该列后必须跟值。不能使用column1 and column2 like value

需要注意的两件事:

  1. 查询不能做num_serie and id_art,你需要明确说明列应该查找的值,而不是一系列列。所以它应该是num_serie LIKE 'a' AND id_art LIKE 'a',例如。
  2. 连接破折号可以通过使用 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,您不妨正常比较字符串,使用等号=而不是LIKE运算符。

最新更新