«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему PDO выдает «аргумент OUT или INOUT... не является переменной» при вызове хранимых процедур с параметрами Out?

Почему PDO выдает «аргумент OUT или INOUT... не является переменной» при вызове хранимых процедур с параметрами Out?

Опубликовано 10 ноября 2024 г.
Просматривать:793

Why Does PDO Throw

Использование PDO для вызова хранимых процедур с внешними параметрами

Вызов хранимых процедур с использованием PDO может быть простым процессом; однако при попытке использовать хранимые процедуры без параметров может возникнуть загадочная ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger

Решение: PDO Особенность

Углубление руководства PDO и сопутствующих обсуждений позволяет выявить аномалию в функциональности подготовленных операторов PDO. Суть проблемы заключается в обработке выходных параметров внутри хранимых процедур.

Чтобы устранить эту проблему, необходим специальный обходной путь:

$stmt = $db->prepare("CALL SomeStoredProcedure(?, ?)"); 
$stmt->execute(array($someInParameter1, $someInParameter2));

Альтернативный подход

Другой вариант предполагает изменение хранимой процедуры, включив в нее инструкцию SELECT, которая извлекает выходной параметр после выполнения хранимой процедуры:

CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); 
SELECT @someOutParameter;

Этот модифицированный подход имитирует поведение, наблюдаемое при прямом вызове хранимой процедуры в MySQL.

Благодаря использованию этих обходных путей загадочная ошибка, связанная с вызовом хранимых процедур без параметров с использованием PDO рассеивается, обеспечивая плавное выполнение и получение значений параметров.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3