Хранимая процедура MySQL: не может работать из кода PHP - PullRequest
3 голосов
/ 09 апреля 2009

У меня есть хранимая ниже процедура для проверки доступности имени пользователя

DELIMITER $$;

DROP PROCEDURE IF EXISTS tv_check_email$$

CREATE PROCEDURE tv_check_email (IN username varchar(50))
BEGIN
  select USER_ID from tv_user_master where EMAIL=username;
END$$

DELIMITER ;$$

Когда я запускаю это из моего внешнего интерфейса MySQL, он работает просто отлично:

call tv_check_email('shyju@techies.com')

Но при попытке выполнить со страницы PHP я получаю сообщение об ошибке типа

"PROCEDURE mydatabase.tv_check_email can't return a result set in the given context"

Я уверен, что моя версия PHP - 5.2.6.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2009

Похоже, что если вы используете библиотеку mysqli PHP, вы можете получить свой набор результатов без необходимости использовать переменную OUT и другой запрос для получения вашего значения. Эта статья охватывает детали:

http://amountaintop.com/php-5-and-mysql-5-stored-procedures-error-and-solution-qcodo

3 голосов
/ 09 апреля 2009

Коди не на 100% прав. Вы можете связать полученные столбцы возврата и вернуть выбранные данные из хранимой процедуры.

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$stmt = $mysqli->prepare("call tv_check_email(?)");
$stmt->bind_param('s', "shyju@techies.com");
$stmt->execute();

$stmt->bind_result($userid);

while ($stmt->fetch()) {
  printf("User ID: %d\n", $userid);
}

$stmt->close();
$mysqli->close();
3 голосов
/ 09 апреля 2009

Вам необходимо связать свой результат с параметром OUT.

См. Документы MySQL на хранимых процедурах

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END;
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a   |
+------+
| 3    |

+ ------ +

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