2009-04-09 16 views
3

私は私のMySQLフロントエンド・ツールからこれを実行すると、ユーザー名の可用性MySQLのストアドプロシージャ:PHPコードから実行することはできません

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 ;$$ 

をチェックするには、以下のストアドプロシージャを、それだけで正常に動作しているがあります。

call tv_check_email('[email protected]') 

しかし、PHPページから実行しようとしたとき、私は秀だ

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

のようなエラーが出ます私のPHPバージョンは5.2.6です

答えて

3

コーディは100%の権利ではありません。結果の戻り列をバインドし、ストアドプロシージャ内から選択データを返すことができます。

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

$stmt = $mysqli->prepare("call tv_check_email(?)"); 
$stmt->bind_param('s', "[email protected]"); 
$stmt->execute(); 

$stmt->bind_result($userid); 

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

$stmt->close(); 
$mysqli->close(); 
+1

ああ、はるかに良い。私の理解から、std。 mysqlの拡張機能は、OUTを除いて結果セットにアクセスすることをサポートしませんが、mysqliは(あなたのコードが示すように)実行しますか?知っておいてよかった。 –

3

結果をOUTパラメータにバインドする必要があります。

あなたはmysqliのPHPライブラリを使用する場合は、実際に使用することなく、結果セットを取得することができますように見えますstored procedures

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 | 

+ ------ +

+0

ありがとうコーディー、それは働いた – Shyju

関連する問題