我一直在为php和mysql编写一个注册页面(登录系统)来编写一个网站。我正在使用两个存储过程。第一个存储过程检查数据库中是否已存在电子邮件地址。第二个存储过程将用户提供的数据插入到mysql数据库中。用户对这两个过程都有EXECUTE权限。当从php脚本中单独执行它们时,它们工作正常。但是当我在脚本中使用它们时,第二个存储过程(插入)无法正常工作。
存储过程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())正在工作。如果我先注释掉第一个(reg_check_email),第二个存储过程(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')");
}
?>
我无法弄清楚错误。
提前致谢, 拉维。
答案 0 :(得分:2)
我在使用php脚本执行存储过程和查询时遇到了类似的问题。
您应该尝试mysqli_multi_query来执行您的SP 调用程序后。使用 mysqli_free_result 来消费结果 您也可以参考this link。希望,它会帮助你。