Подготовленная инструкция, возвращающая нулевые результаты

#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;