Donc j'essaie de construire et de préparer en utilisant PDO, une requête mysql dynamiquement. Voici mes informations de code et de débogage.PHP ne parvient pas à créer une requête PDO dynamiquement.
$allowed_filters = array('hotels.star_rating', 'countries.id');
$where = 'WHERE 1 ';
if (!empty($data['filters'])){
$where = 'WHERE';
foreach ($data['filters'] as $field => $value){
if (in_array($field, $allowed_filters)){
$where .= " $field = :$field &&";
}
else unset($data['filters'][$field]);
}
$where = rtrim($where, '&&');
$where = ($where == 'WHERE')? 'WHERE 1 ' : $where;
}
$st = $this->db->prepare("
SELECT
hotels.code,
hotels.name as name,
hotels.star_rating,
hotels.description,
hotels.cover_image,
countries.name as country,
cities.name as city
FROM
hotels JOIN cities ON cities.id = hotels.city_id
join countries on countries.id = cities.country_id
$where
");
$st->execute($data['filters']);
var_dump($st->fetch());
juste avant la ligne de st- $> execute ($ data [ 'filtres']) i jetai $ st et $ data [ 'filtres']. et les valeurs étaient les suivantes.
Valeur $ st
PDOStatement Object
(
[queryString] =>
SELECT
hotels.code,
hotels.name as name,
hotels.star_rating,
hotels.description,
hotels.cover_image,
countries.name as country,
cities.name as city
FROM
hotels JOIN cities ON cities.id = hotels.city_id
join countries on countries.id = cities.country_id
WHERE
hotels.star_rating = :hotels.star_rating &&
countries.id = :countries.id
)
Valeur pour $ data [ 'filtres']
Array
(
[hotels.star_rating] => 4 stars
[countries.id] => 5
)
AOP lance une exception et échoue avec l'erreur suivante.
SQLSTATE [HY093]: numéro de paramètre non valide: paramètre n'a pas été défini »
aide?
Vrai que. Pourriez-vous expliquer pourquoi, parfois, cela fonctionne sans le colon? par exemple, cela fonctionne bien. $ st = $ dbh-> prepare ('SELECT * FROM hôtels où id =: id'); $ st-> execute (array ('id' => 1)); var_dump ($ st-> fetch()); – shxfee