#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь выполнить следующую подготовленную инструкцию:
PREPARE stmt FROM 'SELECT * FROM Inventory I WHERE I.ParentId = ?';
EXECUTE stmt USING @parentId;
DEALLOCATE PREPARE stmt;
Когда я выполняю эту инструкцию, она возвращает заголовки столбцов без строк. Он должен возвращать 6 строк.
Если я выполняю эту же инструкцию как обычную инструкцию SQL без инструкции PREPARE and EXECUTE, я получаю результаты, например
SELECT * FROM Inventory I WHERE I.ParentId = parentId;
Возвращаются результаты. Что я делаю не так? Происходит ли какое-то приведение, которое делает мое утверждение недействительным?
Обновление, ParentID передается в качестве параметра, например
CREATE DEFINER=`george`@`%` PROCEDURE `ListInventoryByParentId`(IN parentId INT)
Ответ №1:
Пользовательская переменная @ParentID и ParentID аргумента процедуры независимы. Вам нужно установить пользовательскую переменную в аргумент процедуры перед выполнением инструкции.
SET @parentID = parentId;