私はウェブサイトの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')");
}
?>
私は間違いを理解することができません。
前もってありがとう、ラビ。