SQLSTATE[HY093]: недопустимый номер параметра: параметр не был определен (php pdo)

#php #mysql #sql #database #exception

#php #mysql #sql #База данных #исключение

Вопрос:

У меня есть этот запрос, который без внутреннего соединения работает:

 $sql = 'SELECT prodotti.nome, prodotti.prezzo, prodotti.sku, prodotti.produttore, fornitori.nome
                FROM prodotti INNER JOIN fornitori
                ON prodotti.fornitori_id = fornitori.id
                WHERE prodotti.id = :prodotti.id';
         
$id = 1; // for example
// $this->db-> (is connection)
        
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':prodotti.id', $id, PDO::PARAM_INT);
$stmt->execute();

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

$prodlist[$id] = $results;
         
var_dump($prodlist);
 

Если я запускаю его, я получаю эту ошибку:

Фатальная ошибка: неперехваченное исключение PDOException: SQLSTATE [HY093]: недопустимый номер параметра: параметр не был определен……..

Похоже, что ошибка заключается в WHERE том, и определенным образом, читая онлайн, я обнаружил, что это может быть проблемой для этого: WHERE prodotti.id = prodotti.id;

предлагаю сделать, например: WHERE prodotti.id =: id '; и затем bindparam $stmt->bindParam(': id', $ id, PDO :: PARAM_INT); , фактически, то же самое, это работает наполовину, в том смысле, что он возвращает мне данные, называемые первой таблицей «продукты», игнорируя вторую таблицу «поставщики».

Кто-нибудь может сказать мне, где я ошибаюсь? Спасибо

если я выполняю этот запрос в разделе SQL базы данных, он работает.

 SELECT prodotti.nome, prodotti.prezzo, prodotti.sku, prodotti.produttore, fornitori.nome 
FROM prodotti INNER JOIN fornitori 
ON prodotti.fornitori_id = fornitori.id 
WHERE prodotti.id = 1
 

Ответ №1:

как указывали мне некоторые пользователи в другом месте, и фактически это частично решает проблему, точка не может использоваться в привязке, как сообщается в руководстве по этой ссылке: https://phpdelusions.net/pdo

«Обратите внимание, что PDO поддерживает позиционные (?) и именованные (:email) заполнители, последний всегда начинается с двоеточия и может быть записан только с использованием букв, цифр и символов подчеркивания. Также обратите внимание, что никакие кавычки никогда не должны использоваться вокруг заполнителей «.

теперь он работает правильно! Спасибо