Эта тема на forum.dklab.ru


call Proc_Name(): никак не получается вызвать сторедпроцедуру из пхп
доброго дня!
установил стандартный пакет Денвер3

создал в МуСКЛ сторед-процедуру

CREATE DEFINER = 'root'@'localhost'
PROCEDURE MyHomeFinance.test()
BEGIN
select 1;
END


пытаюсь вызвать из консоли МуСКЛ

use MyHome;
call test();


возвращает все корректно

при попытке вызвать ее же из ПХП выдает ошибку
Quwery Error (1312) PROCEDURE myhome.test can't return a result set in the given context

вызываю так
класс вызова МуСКЛ

<?php
//---------------------------------------------------------------------------------------
# keywords: stored procedure result set mysql mysqli php php5
class TMyBD{

protected $sqli;
protected $conn;
protected $rslt;
private $countR;

private $dbhost;
private $dbbase;
private $dbuser;
private $dbpass;

public function __construct($host, $base, $user, $pass)
{
if(!empty($host)) $this->dbhost = $host; else $this->dbhost = "localhost";
if(!empty($base)) $this->dbbase = $base; else $this->dbbase = "MyHome";
if(!empty($user)) $this->dbuser = $user; else $this->dbuser = "MyHomeUser";
if(!empty($pass)) $this->dbpass = $pass; else $this->dbpass = "User";
$this->connect();
}
private function connect()
{
$this->countR=0;
$this->sqli = mysqli_init();
if(!$this->sqli){die("sqli init failed");}
//options
if
(
!$this->sqli->options(MYSQLI_INIT_COMMAND, "SET AUTOCOMMIT=0")||
!$this->sqli->options(MYSQLI_INIT_COMMAND, "SET character_set_database = cp1251")||
!$this->sqli->options(MYSQLI_INIT_COMMAND, "SET NAMES cp1251")||
!$this->sqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)
){die('Setting sqli options failed');}
//connect
$this->conn=$this->sqli->real_connect($this->dbhost,"root","",$this->dbbase);
if(!$this->conn)
{die('Connect Error ('.$this->sqli->connect_errno().') '.$this->sqli->connect_error());}
}
public function close()
{
mssql_close($this->init);
}
public function query($query)
{
echo "SV=".$this->sqli->server_info."<br/>";
echo "SV=".mysqli_get_client_info()."<br/>";
$this->countR=0;
if($this->sqli->multi_query($query))
{
//$this->rslt = new array();
$index=0;
do
{
$this->rslt[$index]=$this->sqli->store_result();
$index+=1;
}while($this->sqli->next_result());
$this->countR=$index;
}else{
echo "Quwery Error (".$this->sqli->errno.") ".$this->sqli->error;
return -1;
}

return $this->countR;
}
};

?>


собственно сам вызов

$MyBD = new TMyBD("","","","");
//........
$MyDBExecQwery="call test()";
$BDReturn=$MyBD->query($MyDBExecQwery);

echo "BDReturn=".$BDReturn;


везде встречал что при использовании mysqli то все сразу заработает ))) - не помогло!
встречал также что нужна версия пхп больше 4.счемто уменя 5.0.45

что может быть еще?
Anonymous:
очень нужна помощь!
заранее спасибо!
EvGeniyLell:
также говорят что можно через функцию mysql_set_server_option()
но денвер почемута ее незнает ...пишет Call to undefined function mysql_set_server_option()
также пытался в фунции real_connect указать флагом CLIENT_MULTI_STATEMENTS...но и это флаг он не распознал....чегото решил что это стринг
$this->conn=$this->sqli->real_connect($this->dbhost,"root","",$this->dbbase,0,"",CLIENT_MULTI_STATEMENTS);
EvGeniyLell:
The server didn't support mysql_set_server_option() (which is the case that the server is older than 4.1.1) or the server didn't support the option one tried to set.
ммм...это значить что эта функция не потдерживается в серверах в версиях выше 4.1.1 ?
Maus:
также говорят что можно через функцию mysql_set_server_option()
Кто говорит?
но денвер почемута ее незнает
Денвер тут ни при чём вообще.
это флаг он не распознал....чегото решил что это стринг
поставьте числовой эквивалент.
это значить что эта функция не потдерживается в серверах в версиях выше 4.1.1 ?
Это значит наоборот. Older - то, что старше => номер версии ниже (исключение: параллельные ветки, типа Apache 2.0 и Apache 2.2 и фраза "older then apache 2.0.59". Тут надо даты релизов сравнивать)
EvGeniyLell:
поставьте числовой эквивалент.
как узнать числовой эквивалент?

Older - то, что старше
бывает...извеняюсь..затупил


Кто говорит?
интернет!
ники я не запоминал, уж извините...
да и неважно кто говорил, для меня щас важен результат - а его нет!

Денрвер тут ни при чём вообще.
ага...не причем....только что такое денвер?
денвер это комплект! вот цитата с http://www.denwer.ru/about.html

Давайте посмотрим, что же включает в себя базовый (основной) пакет Денвера:
Инсталлятор (поддерживается также инсталляция на flash-накопитель).
Apache, SSL, SSI, mod_rewrite, mod_php.
PHP5 с поддержкой GD, MySQL, sqLite.
MySQL5 с поддержкой транзакций.
Система управления виртуальными хостами, основанная на шаблонах. Чтобы создать новый хост, вам нужно лишь добавить директорию в каталог /home, править конфигурационные файлы не требуется. По умолчанию уже поддерживаются схемы именования директорий многих популярных хостеров; новые можно без труда добавить.
Система управления запуском и завершением всех компонентов Денвера.
phpMyAdmin — система управления MySQL через Web-интерфейс.
Эмулятор sendmail и SMTP-сервера (отладочная «заглушка» на localhost:25, складывающая приходящие письма в /tmp в формате .eml); поддерживается работа совместно с PHP, Perl, Parser и т.д.

теперь вы се так же утверждаете что это не денвер?
но не в этом суть...функция mysql_set_server_option все равно не распазнается в пхп коде

неужели никто не работает с сторед процедурами, из тех кто поставил денвер !?
как их заставить работать?
Maus:
как узнать числовой эквивалент?
например, он упомянут в пользовательских комментариях к PHP Manual. Есть и другие варианты.
интернет!
Весь сразу? Прямо так построился и хором скандирует.
да и неважно кто говорил
Как раз в данном случае - важно. О вышеупомянутой функции написано в MySQL C API. Если же на dev.mysql.com в том же разделе Connectors искать информацию про PHP, то там будет написано, что в текущий момент за взаимодействие PHP и MySQL отвечает команда разработчиков PHP. Следовательно, надо идти и искать эту же функцию в PHP Manual. Но там Вы её не найдёте. Отсюда следует, там эта функция не реализована. О чём, собственно, и было сказано интерпретатором.
Поэтому и Денвер тут ни при чём вообще.
(исправил опечатку, спасибо)
Maus:
Перенесено из форума: Базовый пакет :: Денвер.
Перенесено в форум: Разное :: PHP.

Эта тема на forum.dklab.ru