Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Stored Procedure OUT-parameter in PHP



basti1985
04-09-2009, 14:41
hallo ich versuche schon seit tagen irgendwie einen OUT-parameter aus einer SP in PHP anzeigen zu lassen .. doch irgendwie will der nicht so recht
haputsächlich geht es um die ausgabe in zeile 14 (fett)



<?php
$mysql = mysql_connect('localhost', 'root', 'diablo');
mysql_select_db('test', $mysql);
$rs = mysql_query("call get_users('joey', @total);");
while($row = (mysql_fetch_assoc($rs)))
{
print_r($row);
echo '<br />';
}


// now get the @total var
$rs2 = mysql_query("select @total;");
$total = mysql_fetch_assoc($rs2);
print_r($total);

echo "Your Query: " . $rs2 . "<br>";
echo "Error: (" . mysql_errno() . ") " . mysql_error()."<br>";

$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'diablo');
$data = $pdo->query("call get_users('joey', @totalUsers);")->fetchAll(PDO::FETCH_ASSOC);
$total_count = $pdo->query("select @totalUsers;")->fetchAll(PDO::FETCH_ASSOC);
print_r($data);
echo '<br />';
print_r($total_count);
?>



Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in line 14
Your Query:
Error: (2014) Commands out of sync; you can't run this command now


der grundgedanke stammt von dieser (http://www.joeyrivera.com/2009/using-mysql-stored-procedures-with-php-mysqlmysqlipdo/) bzw dieser (http://www.joeyrivera.com/2009/using-mysql-stored-procedure-inout-and-recordset-w-php/) seite

lass ich das ganze hingegen in der MySQL-console laufen gibts keine probleme

MySQL-Server: 5.1.37
MySQL-Client: 5.1.11
PHP: 5.3.0

jecke
06-09-2009, 17:17
Die Fehlermeldung ist eindeutig. Du hast der Funktion einen Bool Wert übergeben
anstatt der Resource ID der vorherigen DB Abfrage.

basti1985
07-09-2009, 17:14
ja die fehlermeldung ist recht eindeutig .... nun dem dem zusammenhang etwas verwirrend ...

mit PDO funktioniert das ganze ja ...

was also müsste geändert / angepasst werden

zenobic
07-09-2009, 17:51
mit mqsli sollte es funktionieren,
im php-manual (http://209.85.129.132/search?q=cache:wqKyaimtlswJ:www.php.net/mysql_query+mysql_query+stored+procedure&cd=1&hl=en&ct=clnk&client=iceweasel-a) berichtet einer von dem bedarf die Datenbankverbindung zu schliessen nach der ersten abfrage und wiederöffnen, könnte an der guten alten mysql extension zu liegen.

basti1985
07-09-2009, 18:54
ich hab des jetzt nochmal mit mysqli versucht ... jedoch mit nem ähnlichen problem



<?php
$mysql = mysql_connect('localhost', 'root', 'diablo',false,65536);
mysql_select_db('test', $mysql);
$rs = mysql_query("call get_users('joey', @total);");
while($row = (mysql_fetch_assoc($rs)))
{
print_r($row);
echo '<br />';
}

mysql_close($mysql);

// now get the @total var
$rs2 = mysql_query("select @total;");
$total = mysql_fetch_assoc($rs2);
print_r($total);

echo "<br>Your Query: " . $rs2 . "<br>";
echo "Error: (" . mysql_errno() . ") " . mysql_error()."<br>";

$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', 'diablo');
$data = $pdo->query("call get_users('joey', @totalUsers);")->fetchAll(PDO::FETCH_ASSOC);
$total_count = $pdo->query("select @totalUsers;")->fetchAll(PDO::FETCH_ASSOC);
print_r($data);
echo '<br />';

echo '-------------------------------------------------------------------------';
echo '-------------------------------------------------------------------------';
echo '<br>mysqli';

$mysqli = new mysqli('localhost', 'root', 'diablo', 'test');

print '<h3>MYSQLI: calling sp returning a recordset</h3>';

$rs2 = $mysqli->query("select @total;");
$total = mysql_fetch_assoc($rs2);
print_r($total);
?>



Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in /home/basti/public_html/sqlout.php on line 36

zenobic
16-09-2009, 16:21
ich hab des jetzt nochmal mit mysqli versucht ... jedoch mit nem ähnlichen problem


<?php
...
echo '-------------------------------------------------------------------------';
echo '-------------------------------------------------------------------------';
echo '<br>mysqli';

$mysqli = new mysqli('localhost', 'root', 'diablo', 'test');

print '<h3>MYSQLI: calling sp returning a recordset</h3>';

$rs2 = $mysqli->query("select @total;");
$total = mysql_fetch_assoc($rs2);
print_r($total);




da hat sich ein typo eingeschlicchen.
Die Funktion heisst equivalent zu mysql
`mysqli_fetch_assoc'
bzw. $result -> fetch_assoc()



while ($row = $rs2->fetch_assoc()) {
print_r($row);
}


http://de.php.net/manual/en/mysqli-result.fetch-assoc.php