#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) заполнители, последний всегда начинается с двоеточия и может быть записан только с использованием букв, цифр и символов подчеркивания. Также обратите внимание, что никакие кавычки никогда не должны использоваться вокруг заполнителей «.
теперь он работает правильно! Спасибо