2013-05-14 3 views
0

Не похоже, что есть проблема, я не понимаю, почему не возвращает данные.Почему эта хранимая процедура не работает?

Это моя хранимая процедура:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `test`.`get_products`$$ 
CREATE PROCEDURE `test`.`get_products` 
(
    OUT out_productName VARCHAR(255) 
) 
BEGIN 
SELECT productName INTO out_productName FROM products; 
END $$ 
DELIMITER ; 

и это, как я это называю:

$rs = mysql_query('CALL get_products(@f)'); 
$rs = mysql_query('SELECT @f'); 
while($row = mysql_fetch_assoc($rs)) 
{ 
print_r($row); 
} 
+1

Использование команд mysql_ * устарело и небезопасно. Вы действительно должны изучить использование [PDO] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/) для взаимодействия с mysql. – FireCrakcer37

ответ

0

это не совсем ответ на ваш вопрос, но работа вокруг просто не использовать выходной параметр

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `test`.`get_products`$$ 
CREATE PROCEDURE `test`.`get_products` 
(

) 
BEGIN 
SELECT productName INTO @f FROM products; 
END $$ 
DELIMITER ; 


mysql_query('set @f = 0;'); 
$rs = mysql_query('CALL get_products()'); 
$rs = mysql_query('SELECT @f'); 
while($row = mysql_fetch_assoc($rs)) 
{ 
print_r($row); 
} 

@f будет поддерживаться в базе данных и могут быть доступны для SQL сессии, если я правильно помню

также в том случае, если бы возвращение вещей при получении результатов из хранимой процедуры вы также хотите использовать

$rs->close(); 
$connection->next_result(); 

соединение будет то, что вы назвали ваш-св n string

+0

Спасибо, это отлично работает ... –

0

Try:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test.get_products; 
CREATE PROCEDURE test.get_products() 
BEGIN 
SELECT productName FROM products; 
END $$ 
DELIMITER ; 

И называют это:

$rs = mysql_query('CALL test.get_products()'); 
while($row = mysql_fetch_assoc($rs)) 
{ 
    print_r($row); 
} 
Смежные вопросы