$wordsAry = explode(" ", $search); $wordsCount = count($wordsAry); $queryCondition = " WHERE "; for($i=0;$i<$wordsCount;$i++) { $queryCondition .= "`location` LIKE '%$wordsAry[$i]%'"; if($i!=$wordsCount-1) { $queryCondition .= " OR "; } } echo $queryCondition; $sql1 = "SELECT * FROM `shelves_instruments` :szukaj ORDER BY location ASC"; $licz_ilosc = $connect_db -> prepare($sql1); $licz_ilosc -> bindValue(':szukaj', $queryCondition, PDO::PARAM_STR); $licz_ilosc -> execute(); $ilosc_stron = $licz_ilosc->rowCount();DONDE
locationCOMO '%walida%'
Error fatal: excepción PDO no detectada: SQLSTATE[42000]: error de sintaxis o infracción de acceso: 1064 Tiene un error en su sintaxis SQL; verifique el manual que corresponde a la versión de su servidor MariaDB para conocer la sintaxis correcta para usar cerca de '' WHERE
locationLIKE '%walida%'' ORDER BY ubicación ASC' en la línea 2 en
¿Qué podría estar mal?
Las declaraciones preparadas no son una forma elegante de sustituir texto. No puede enviar una cláusula WHERE completa como un solo parámetro.
Necesita crear una cláusula WHERE como esta:
$where = "WHERE `location` like :term1 OR `location` like :term2";Luego crea tus términos de tal manera que
$param1 = '%'.$firstTerm.'%' ; $param2 = '%'.$secondTerm.'%' ;Luego vincule sus términos a su declaración preparada
$query = "SELECT * FROM `shelves_instruments` ".$where." ORDER BY location ASC" $licz_ilosc = $connect_db -> prepare($query); $licz_ilosc->execute([ "term1"=>$param1, "term2"=>$param2 ]);