Войти

Показать полную графическую версию : [решено] Использование stored procedure в MySQL


Strange_V
04-06-2009, 01:52
Пишу небольшое приложение, есть желание использовать stored procedure ибо это упростить дальнейшие сопровождение, но эсть проблема.
Или я что то упускаю, или делаю не логично:
$mysqli = new mysqli('localhost', 'test', '123456', 'db_test');

if (mysqli_connect_errno()) {
printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error());
exit;
}
//Запрос 1
if ( !$mysqli->multi_query('SELECT id, hash FROM myTable ORDER BY 1 LIMIT 15;') )
echo $mysqli->error;
$result = $mysqli->store_result();
while( $row = $result->fetch_assoc() ){
printf("%d (%s)<br />", $row['id'], $row['hash']);
}
$result->close();
//Запрос 2
if ( !$mysqli->multi_query('CALL test1;') )
echo $mysqli->error;
$result = $mysqli->store_result();
$row = $result->fetch_assoc();
printf("%d<br />", $row[1]);
$result->close();
//Запрос 3
if ( !$mysqli->multi_query('SELECT id, hash FROM myTable ORDER BY 2 LIMIT 5;') )
echo $mysqli->error;
$result = $mysqli->store_result();
while( $row = $result->fetch_assoc() ){
printf("%d (%s)<br />", $row['id'], $row['hash']);
}
$result->close();

$mysqli->close();
Третий запрос отваливается с "Commands out of sync; you can't run this command now".
Как правильно делать вызов нескольких SELECT и CALL под ряд?
Спасибо.

Sham
04-06-2009, 13:41
If you execute mysqli_query() with resultmode MYSQLI_USE_RESULT all subsequent calls will return error Commands out of sync unless you call mysqli_free_result()

см. http://ru2.php.net/mysqli_query

Strange_V
04-06-2009, 15:00
Sham, я читаю мануалы) там конечно написана правда, но совсем не описана причина такого поведения.
Вчера пол дня безрезультатно гуглил, а сегодня случайно наткнулся на полный ответ (http://habrahabr.ru/blogs/webdev/21326/).




© OSzone.net 2001-2012