PDO inout Parameter

aKraus

Erfahrenes Mitglied
Hallo,

ich versuche mit PDO eine Procedure aufzurufen, die mir einen Wert per Parameter zurückgibt:

PHP:
	$conn = new PDO('mysql:dbname=xxx;host=database.localhost', 'xxx', 'xxx');	
	
	$sql = 'CALL test(?)';
	$stmt = $conn->prepare($sql);
	
	$value = "test value";
	$weight = 0;
	
	$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 32);
	
	print "Values of bound parameters _before_ CALL:\n";
	print "  1: {$value} <br> \n";
	
	$stmt->execute();
	
	print "Values of bound parameters _after_ CALL:\n";
	print "  1: {$value} \n";

Procedure:
Code:
DELIMITER $$

CREATE DEFINER=`xxx`@`%` PROCEDURE `test`(
    inout i_nick varchar(255)
)
BEGIN

    set i_nick = ' test test test test ';

Der Aufruf der Procedure im MySQL Workbench funktioniert. Hat jemand eine Idee? In PHP ist die Ausgabe leider folgende:

HTML:
Values of bound parameters _before_ CALL: 1: test value
Values of bound parameters _after_ CALL: 1: test value
 
Eigentlich machst du es nicht so, wie in den Comments beschrieben. Nur mal zum vergleichen:

PHP Manual Comments hat gesagt.:
Note for MySQL: to use input/output parameters for stored procedures with PDO use PDO.Query() statement.
For example:

PHP:
<?php
$dbh->query("CAST SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)");
$dbh->query("SELECT @someOutParameter");
?>
Or, if you want very much to use PDO.Prepare(), insert "SELECT @someOutParameter" in your stored procedure and then use:

PHP:
<?php
$stmt = $dbh->prepare("CAST SomeStoredProcedure(?, ?)");
$stmt ->execute(array($someInParameter1, $someInParameter2));
?>
 
das ist nicht wirklich was ich will. einen select ausführen ist was anderes als das ganze als parameter zurückzugeben. warum schafft es der MySql .Net Connector sowas? Das muss doch in php auch gehen.
 
Ich meinte eigentlich CAST statt CALL. Du hast nicht genau hingesehen ;-)

Obwohl ich den Befehl in anderem Zusammenhang kenne.
 
Zurück