0

私はウェブサイトのphpとmysqlで登録ページ(ログインシステム)をコーディングしています。同じために2つのストアドプロシージャを使用しています。最初のストアド プロシージャは、電子メール アドレスがデータベースに既に存在するかどうかをチェックします。2 番目のストアド プロシージャは、ユーザーが提供したデータを mysql データベースに挿入します。ユーザーは両方のプロシージャに対してEXECUTE権限を持っています.phpスクリプトから個別に実行すると、正常に動作します。しかし、スクリプトでそれらを一緒に使用すると、2番目のストアドプロシージャ(挿入)が機能しません。

ストアド プロシージャ 1。

DELIMITER $$
CREATE PROCEDURE reg_check_email(email VARCHAR(80))
BEGIN
SET @email = email;
SET @sql = 'SELECT email FROM user_account WHERE user_account.email=?';
PREPARE stmt FROM @sql;
EXECUTE stmt USING @email;
END$$
DELIMITER;

ストアド プロシージャ 2

DELIMITER $$
CREATE PROCEDURE reg_insert_into_db(fname VARCHAR(40), lname VARCHAR(40), email      VARCHAR(80), pass VARBINARY(32), licenseno VARCHAR(80), mobileno VARCHAR(10))
BEGIN
SET @fname = fname, @lname = lname, @email = email, @pass = pass, @licenseno =    licenseno, @mobileno = mobileno;
SET @sql = 'INSERT INTO user_account(email,pass,last_name,license_no,phone_no)    VALUES(?,?,?,?,?)';
PREPARE stmt FROM @sql;
EXECUTE stmt USING @email,@pass,@lname,@licenseno,@mobileno;
END$$
DELIMITER;

これらをphpサンプルスクリプトからテストすると、挿入が機能しませんが、最初のストアドプロシージャ(reg_check_email())が機能しています。最初の 1 つ (reg_check_email) をコメントアウトすると、2 番目のストアド プロシージャ (reg_insert_into_db) は正常に動作します。

 <?php
 require("/wamp/mysql.inc.php");
 $r = mysqli_query($dbc,"CALL reg_check_email('ravi@gmail.com')");
 $rows = mysqli_num_rows($r);
 if($rows == 0) {
     $r = mysqli_query($dbc,"CALL   reg_insert_into_db('a','b','ravi@gmail.com','c','d','e')");
     }
 ?>

私は間違いを理解することができません。

前もってありがとう、ラビ。

4

1 に答える 1

2

I faced the similar kind of issues, while executing stored procedures and queries using php script.

You should try mysqli_multi_query for executing your SPs.
After calling procedures. use mysqli_free_result to consume results.
You can refer this link as well. Hope, it'll help you.

于 2012-06-05T16:55:58.263 に答える