pear & stored procdures in Mysql
stored procedure и select-им какиета данные.
когда делаем запрос через sql manager всё ок, но через php возникает проблема:
после запроса выдаёт ерор:
DB Error: unknown error
что pear не понимает stored procedure-ы?
Поскольку телепаты уже в новогоднем отпуске лучше будет если вы приведете пример кода...
$password = $user['password'] ;
$sql = "CALL login('".$username."', '".$password."' ) " ;
$res = $db->query($sql) ;
pod, а код процедуры login?
IN inp_pass TEXT
BEGIN
SELECT * FROM s_users WHERE login=inp_login AND password = inp_pass ;
END
2) Убедись что ты передаешь в процедуру нормальные значения переменных username и password. Для этого после третьей строчки вставь echo $sql;
Цитата: shine
1) Убедись что ты действительно законектился к базе. Можешь вместо вызова процедуры сделать какой-то элементарный запрос. Например SELECT VERSION()
2) Убедись что ты передаешь в процедуру нормальные значения переменных username и password. Для этого после третьей строчки вставь echo $sql;
2) Убедись что ты передаешь в процедуру нормальные значения переменных username и password. Для этого после третьей строчки вставь echo $sql;
это всё было сделанно, то что выводилось в следствии echo я это копирывал в sql manager и делал exequte query всё работоло,
может pear не понемает кто такой $result который возвращает процедура?
Цитата:
PEAR (PHP Extension and Application Repository) DB package
This package offers a database-independent API for communicating with relational databases from PHP. PEAR :: DB includes support for MySQL, but provides only rudimentary support for MySQL stored programs.
This package offers a database-independent API for communicating with relational databases from PHP. PEAR :: DB includes support for MySQL, but provides only rudimentary support for MySQL stored programs.
а как небуть можно решить эту проблему? может какая небуть функция может скушать этот $result?
Цитата: pod
а как небуть можно решить эту проблему? может какая небуть функция может скушать этот $result?
"Телепаты в отпуске" (с)
Ты для начала расскажи что ты хочешь соорудить и каким образом используешь PEAR для этого?
CREATE TABLE `s_users` (
`s_users_id` bigint(11) NOT NULL auto_increment,
`login` text,
`password` text,
`active` tinyint(1) default NULL,
`s_group_id` bigint(20) NOT NULL,
PRIMARY KEY (`s_users_id`),
KEY `s_group_id` (`s_group_id`),
CONSTRAINT `s_users_fk` FOREIGN KEY (`s_group_id`) REFERENCES `s_groups` (`s_groups_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
надо достать хоть один row;
делаю это так:
есть процедура:login
CREATE PROCEDURE `login`(IN inp_login TEXT, IN inp_pass TEXT)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT * FROM s_users WHERE login=inp_login AND password = inp_pass ;
END;
php code:
$db=DB::connect($this->getPearDSN());
$db->setFetchMode(DB_FETCHMODE_OBJECT);
echo $sql="CALL login('admin','admin')";
$result=$db->query($sql);
$menu=$result->fetchRow();
валитса на fetchRow
Для доступа к БД используй вместо PEAR обычные mysql_* функции. Если нужен объектный стиль, то можешь использовать mysqli. Правда он работает только в 5-х версиях PHP и MySQL.
http://pear.php.net/bugs/bug.php?id=104
вот чего я нашёл.
eh еслибы можно былобы mysql, нашо начальство сказало pear и всё.
как хотите так и разберайтесь
вот чего я нашёл.
eh еслибы можно былобы mysql, нашо начальство сказало pear и всё.
как хотите так и разберайтесь
Может быть у тебя получиться использовать какой-нибудь другой пакет из PEAR (менее глючный чем DB). Глянь в этом списке: http://pear.php.net/packages.php?catpid=7&catname=Database
в будущем мы наверное больше не будем использовать pear если bug-и не исправяса и я не советывол бы некому иметь с ними дело, потому что у нас на это ушло 2 рабочих дня.
облом полный.
Именно поэтому надо было строить на adodb...
Цитата: pod
в будущем мы наверное больше не будем использовать pear если bug-и не исправяса и я не советывол бы некому иметь с ними дело, потому что у нас на это ушло 2 рабочих дня.
Ну я бы так не сказал. В PEAR есть достаточно интересные модули. Меня допустим совсем недавно здорово выручил модуль экспорта/импорта в Excel. Все аналоги были или платные, или для некоммерческого использования.
Другое дело, что не стоит PEAR использовать там, где есть стандартные функции PHP/MySQL.
у pear есть такая функция
executeMultiple();
вот с ней уже работает процедура но к ней нужна мальенкая подготовка
конкретнее смотрите:
http://pear.php.net/manual/ru/package.database.db.db-common.executemultiple.php
$a=array();
$a[]=1;
$res=MDB2_Driver_Function_Common::executeStoredProc('GetBlockVersions',$a);
она почемуто умирает
Передавай имя параметра, а не только его значение.
MDB2_Driver_Function_Common::$executeStoredProc('GetBlockVersions',array($a,'a'));
Цитата: pod
типа так?
MDB2_Driver_Function_Common::$executeStoredProc('GetBlockVersions',array($a,'a'));
MDB2_Driver_Function_Common::$executeStoredProc('GetBlockVersions',array($a,'a'));
Типа так: array('param_name' => $value)
require_once("/srv/www/req/katran/variables.php");
require_once 'MDB2.php';
//require_once("common.php");
$dsn=new variables();
$str=$dsn->getPearDSN();
$mdb2 =MDB2::connect($str);
$a=array();
$a[]='1';
MDB2_Driver_Function_Common::executeStoredProc('GetBlockVersions',array('param_name' => $a));
echo "asd";
if ($res)
{
echo "executed";
}
else
echo "failur";
вот вес код, он валитса после вызова executeStoredProc
Вместо param_name используй реальное имя параметра. То которое у тебя в процедуре используется.
и он тоже сдох :( облом полный
Переходи на нормальные методы работы с базой вместо PEAR и почувствуй себя человеком :)