Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

pear & stored procdures in Mysql

1.8K
21 декабря 2006 года
pod
144 / / 05.04.2006
конектимся к базе с pear-ом и задаём sql запрос который вызывает
stored procedure и select-им какиета данные.
когда делаем запрос через sql manager всё ок, но через php возникает проблема:
после запроса выдаёт ерор:
DB Error: unknown error
что pear не понимает stored procedure-ы?
13
21 декабря 2006 года
RussianSpy
3.0K / / 04.07.2006
Поскольку телепаты уже в новогоднем отпуске лучше будет если вы приведете пример кода...
1.8K
21 декабря 2006 года
pod
144 / / 05.04.2006
$username = $user['username'] ;
$password = $user['password'] ;
$sql = "CALL login('".$username."', '".$password."' ) " ;
$res = $db->query($sql) ;
337
21 декабря 2006 года
shine
719 / / 09.06.2006
pod, а код процедуры login?
1.8K
21 декабря 2006 года
pod
144 / / 05.04.2006
IN inp_login TEXT
IN inp_pass TEXT

BEGIN

SELECT * FROM s_users WHERE login=inp_login AND password = inp_pass ;


END
337
21 декабря 2006 года
shine
719 / / 09.06.2006
1) Убедись что ты действительно законектился к базе. Можешь вместо вызова процедуры сделать какой-то элементарный запрос. Например SELECT VERSION()
2) Убедись что ты передаешь в процедуру нормальные значения переменных username и password. Для этого после третьей строчки вставь echo $sql;
1.8K
21 декабря 2006 года
pod
144 / / 05.04.2006
Цитата: shine
1) Убедись что ты действительно законектился к базе. Можешь вместо вызова процедуры сделать какой-то элементарный запрос. Например SELECT VERSION()
2) Убедись что ты передаешь в процедуру нормальные значения переменных username и password. Для этого после третьей строчки вставь echo $sql;



это всё было сделанно, то что выводилось в следствии echo я это копирывал в sql manager и делал exequte query всё работоло,
может pear не понемает кто такой $result который возвращает процедура?

337
21 декабря 2006 года
shine
719 / / 09.06.2006
pod, возможно ты прав. Смотри что я нарыл только что в инете:

Цитата:
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.

1.8K
22 декабря 2006 года
pod
144 / / 05.04.2006
а как небуть можно решить эту проблему? может какая небуть функция может скушать этот $result?
337
22 декабря 2006 года
shine
719 / / 09.06.2006
Цитата: pod
а как небуть можно решить эту проблему? может какая небуть функция может скушать этот $result?



"Телепаты в отпуске" (с)
Ты для начала расскажи что ты хочешь соорудить и каким образом используешь PEAR для этого?

1.8K
22 декабря 2006 года
pod
144 / / 05.04.2006
ok тестирую на table s_users

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
337
22 декабря 2006 года
shine
719 / / 09.06.2006
Для доступа к БД используй вместо PEAR обычные mysql_* функции. Если нужен объектный стиль, то можешь использовать mysqli. Правда он работает только в 5-х версиях PHP и MySQL.
1.8K
22 декабря 2006 года
pod
144 / / 05.04.2006
http://pear.php.net/bugs/bug.php?id=104
вот чего я нашёл.

eh еслибы можно былобы mysql, нашо начальство сказало pear и всё.
как хотите так и разберайтесь
337
22 декабря 2006 года
shine
719 / / 09.06.2006
Мрачно :(
Может быть у тебя получиться использовать какой-нибудь другой пакет из PEAR (менее глючный чем DB). Глянь в этом списке: http://pear.php.net/packages.php?catpid=7&catname=Database
1.8K
22 декабря 2006 года
pod
144 / / 05.04.2006
мы нашу систему сначаложе построиле на pear. а потом нашли что у pear очень много bug-ов к сожелению.
в будущем мы наверное больше не будем использовать pear если bug-и не исправяса и я не советывол бы некому иметь с ними дело, потому что у нас на это ушло 2 рабочих дня.
облом полный.
13
22 декабря 2006 года
RussianSpy
3.0K / / 04.07.2006
Именно поэтому надо было строить на adodb...

http://adodb.sourceforge.net/
337
22 декабря 2006 года
shine
719 / / 09.06.2006
Цитата: pod
в будущем мы наверное больше не будем использовать pear если bug-и не исправяса и я не советывол бы некому иметь с ними дело, потому что у нас на это ушло 2 рабочих дня.



Ну я бы так не сказал. В PEAR есть достаточно интересные модули. Меня допустим совсем недавно здорово выручил модуль экспорта/импорта в Excel. Все аналоги были или платные, или для некоммерческого использования.

Другое дело, что не стоит PEAR использовать там, где есть стандартные функции PHP/MySQL.

1.8K
22 декабря 2006 года
pod
144 / / 05.04.2006
yo чуваки я разобрался.
у pear есть такая функция
executeMultiple();
вот с ней уже работает процедура но к ней нужна мальенкая подготовка
конкретнее смотрите:
http://pear.php.net/manual/ru/package.database.db.db-common.executemultiple.php
1.8K
26 декабря 2006 года
pod
144 / / 05.04.2006
на сколько правильно я использую эту функцию?

$a=array();
$a[]=1;
$res=MDB2_Driver_Function_Common::executeStoredProc('GetBlockVersions',$a);

она почемуто умирает
337
26 декабря 2006 года
shine
719 / / 09.06.2006
Передавай имя параметра, а не только его значение.
1.8K
26 декабря 2006 года
pod
144 / / 05.04.2006
типа так?
MDB2_Driver_Function_Common::$executeStoredProc('GetBlockVersions',array($a,'a'));
337
26 декабря 2006 года
shine
719 / / 09.06.2006
Цитата: pod
типа так?
MDB2_Driver_Function_Common::$executeStoredProc('GetBlockVersions',array($a,'a'));



Типа так: array('param_name' => $value)

1.8K
26 декабря 2006 года
pod
144 / / 05.04.2006
nop!

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
337
26 декабря 2006 года
shine
719 / / 09.06.2006
Вместо param_name используй реальное имя параметра. То которое у тебя в процедуре используется.
1.8K
26 декабря 2006 года
pod
144 / / 05.04.2006
MDB2_Driver_Function_Common::executeStoredProc('GetBlockVersions',array('block_id' => $a));
и он тоже сдох :( облом полный
337
26 декабря 2006 года
shine
719 / / 09.06.2006
Переходи на нормальные методы работы с базой вместо PEAR и почувствуй себя человеком :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог