通过php调用存储过程时出现奇怪错误
我一直在用php和mysql为一个网站编写注册页面(登录系统)。我使用两个存储过程来处理同一个问题。第一个存储过程检查数据库中是否已经存在电子邮件地址。第二个存储过程将用户提供的数据插入mysql数据库。用户对这两个过程都有执行权限。当从php脚本分别执行它们时,它们工作正常。但当我在脚本中同时使用它们时,第二个存储过程(insert)不起作用 存储过程1。通过php调用存储过程时出现奇怪错误,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我一直在用php和mysql为一个网站编写注册页面(登录系统)。我使用两个存储过程来处理同一个问题。第一个存储过程检查数据库中是否已经存在电子邮件地址。第二个存储过程将用户提供的数据插入mysql数据库。用户对这两个过程都有执行权限。当从php脚本分别执行它们时,它们工作正常。但当我在脚本中同时使用它们时,第二个存储过程(insert)不起作用 存储过程1。 DELIMITER $$ CREATE PROCEDURE reg_check_email(email VARCHAR(80)) BEGI
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测试这些脚本时,示例脚本insert不起作用,但第一个存储过程(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')");
}
?>
在使用php脚本执行存储过程和查询时,我遇到了类似的问题
您应该尝试执行SPs。
调用程序后。使用mysqli\u free\u result使用结果。
你也可以参考。希望,它能帮助您。您收到的错误消息是什么?您是否通过执行echo检查$rows返回的内容?它返回的内容是什么?@somnath由于我的数据库表为空,$rows返回0。如果有条件的话,我也在里面留了一个回音。即使它在工作。一些不相关的提示:一个有效的电子邮件地址可以长达253个字符。您应该将电子邮件地址设置为唯一索引,并尝试插入,而不是选择然后插入。但是,如果您想继续按自己的方式进行操作,则应该使用SELECT FOR UPDATE和transactions(或使用MyISAM锁定表),以避免重复插入。