Приходится заново октрывать БД в каждом файле

Mols

Новичок
есть похожая трабла
$conn=mysqli_connect($host, $login, $passwd, $dbase);

if($conn) {
mysqli_autocommit($conn, TRUE);
if( mysqli_real_query($conn, $query))
{
if($recordset = mysqli_store_result($conn))
{
$res = fetch2($recordset); вычитал данные
mysqli_free_result($recordset);
return $res; - обычный массив
}
else if (mysqli_errno($conn)!=0) trigger_error(mysqli_error($conn));
else return array();

} else trigger_error(mysqli_error($conn));
}
else trigger_error(mysqli_connect_error());
mysqli_close($conn);
так вот если пытаюсь сделать второй запрос не выплняя mysqli_close($conn); - выдает ошибку мол нельзя выполнять запрос.... В доках нашел только то что надо делать mysqli_free_result ... но вроде ж делаю. Очень не хочется каждый раз открывать соединение.. Подскажите плиз в чём ошибка ?
 

Фанат

oncle terrible
Команда форума
попробуй сделать лицо попроще, и вместо всех этих autocommit, real_query и store_result воспользоваться классическим способом query-fetch
глядишь, всё и заработает.
 

Mols

Новичок
одно мнение есть ))) ошибка в сложности лице ))) оригинально.
может у кого-то есть другое видение ?Хотелось бы понять где ошибка в этом коде.
 

Фанат

oncle terrible
Команда форума
в функции fetch2

и не стоит СТОЛЬ пренебрежительно относиться к тому, что тебе ответили.

Если ответ не содержит того, чего ты ожидал - это не повод его сразу отвергать.

Впрочем, у тебя есть возможность аргументированно объяснить выбор именно этих функций. И я тогда изменю свое мнение.
 

Mols

Новичок
м-м-м... ну fetch2 простая
function fetch2($recordset) {
$data = array();
while($row = mysqli_fetch_assoc($recordset)){
array_push($data, $row);
}
return $data;
}
 

Фанат

oncle terrible
Команда форума
а теперь приведи здесь точное сообщение об ошибке.
а не свой вольный пересказ. тоже мне - сказитель Боян нашёлся.
 

Mols

Новичок
Ошибка такая
Commands out of sync; you can't run this command now in - далее идет номер строки . Срабатывает else для условия (mysqli_real_query($conn, $query)). В общем второй запрос не выполняется. Кстати выяснил ещё один момент. Эта ошибка появляется только после вызова процедуры. Если делать SELECTы то всё нормально. Но после первого вызова процедуры - возникает эта ошибка. Причем результат первой выполнившейся процедуры - получаю.
ЗЫ . Кстати я не совсем понял почему образовалась новая ветка. Я вроде в уже существующей вопрос задавал.

-~{}~ 21.11.06 16:44:

Вопрос решен. Дело в том, что на вызов процедуры приходит два резалта (второй видимо для ОУТ параметров) И надо освобождать оба. Тогда всё нормально работает. Надеюсь эта информация кому-нить поможет сэкономить время.
 

VsegdaV

Новичок
Столкнулся с подобной проблемой. В разных местах последовательно вызываю 3-и хранимки.
Первая отрабатывается на отлично, остальные, несмотря на то что я корректно закрываю результат. проблема никак не решается...

$res = $mysqli->query('запрос');

$res->free();

Последующий вызов обламывается и ничего кроме
"Commands out of sync; you can't run this command now" получить не удается... Инструкции читал... не помогает.

PS тестирую на виндовой машине - все нормально. Запускаю на рабочем сервере под фриБСД - выдает ошибку.

Версии софта - PHP 5.2.0, MySQL 5.0.27
 

VsegdaV

Новичок
Андрейка
Спасибо!
Все заработало, если вызывать после освобождения результата такую конструкцию:

if ($mysqli->next_result()){
if ($res=$mysqli->store_result()){
$res->free();
}
}
 
Сверху