"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o PDO lança "O argumento OUT ou INOUT ... não é uma variável" ao chamar procedimentos armazenados com parâmetros Out?

Por que o PDO lança "O argumento OUT ou INOUT ... não é uma variável" ao chamar procedimentos armazenados com parâmetros Out?

Publicado em 2024-11-10
Navegar:638

Why Does PDO Throw

Usando PDO para invocar procedimentos armazenados com parâmetros externos

Chamar procedimentos armazenados usando PDO pode ser um processo contínuo; entretanto, ao tentar utilizar procedimentos armazenados sem parâmetros, um erro enigmático pode surgir:

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

A solução: uma peculiaridade do PDO

Aprofundar-se nas profundezas do manual do PDO e das discussões que o acompanham desvenda uma anomalia dentro do PDO preparado funcionalidade de declaração. O cerne do problema está no tratamento de parâmetros fora dos procedimentos armazenados.

Para corrigir esse problema, uma solução alternativa específica é necessária:

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

Abordagem Alternativa

Outra opção envolve modificar o procedimento armazenado para incluir uma instrução SELECT que recupera o parâmetro out após a execução do procedimento armazenado:

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

Esta abordagem modificada imita o comportamento observado ao chamar diretamente o procedimento armazenado no MySQL.

Ao adotar essas soluções alternativas, o erro enigmático associado à chamada de procedimentos armazenados sem parâmetros usando PDO dissipa, permitindo execução perfeita e recuperação de valores de parâmetros externos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3