Używam PDO już od jakiegoś czasu i dokonuję refaktoryzacji projektu, aby używał zapisanych procesów zamiast wstawianego SQL. Otrzymuję błąd, którego nie mogę wyjaśnić. Używam wersji PHP 5.3.5 i MySQL w wersji 5.0.7.Wywołanie procedury składowanej z parametrem Out przy użyciu PDO
Po prostu próbuję uzyskać podstawowy zapisany proces z wyjściem do pracy. Oto przechowywane proc:
DELIMITER //
CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100))
BEGIN
SET var1 = 'This is a test';
END //
Oto kod używam zadzwonić do proc, $ db jest instancją PDO:
$stmt = $db->prepare("CALL proc_OUT(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
// call the stored procedure
$stmt->execute();
echo $returnvalue;
Proste prawda? Jednak wyniki w następujący błąd:
exception 'PDOException' with message '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
Gdybym wywołać proc bezpośrednio tak:
CALL proc_OUT(@res);
SELECT @res;
to działa zgodnie z oczekiwaniami, które pozwala mi wierzyć, że nie ma problemu z tym, jak to jest będąc wywoływanym przez PHP, jednak nie mogę znaleźć problemu. Postępuję zgodnie z instrukcjami w the manual, ale nadal otrzymuję ten błąd. Czy ktoś mógłby zasugerować, co mogę zrobić źle? Każda rada byłaby bardzo doceniana. Dzięki wielkie!
http://stackoverflow.com/a/4502524/815386 –
Powtórzyłem to z mysql 5.5.28 i php 5.3.10. Wydaje się, że masz dwie wersje '$ return_value' - inną bez podkreślenia. Czy to jest zamierzone? Wydaje się, że nie ma różnicy w wynikach. –