Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过php调用存储过程时出现奇怪错误_Php_Mysql_Stored Procedures - Fatal编程技术网

通过php调用存储过程时出现奇怪错误

通过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

我一直在用php和mysql为一个网站编写注册页面(登录系统)。我使用两个存储过程来处理同一个问题。第一个存储过程检查数据库中是否已经存在电子邮件地址。第二个存储过程将用户提供的数据插入mysql数据库。用户对这两个过程都有执行权限。当从php脚本分别执行它们时,它们工作正常。但当我在脚本中同时使用它们时,第二个存储过程(insert)不起作用

存储过程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测试这些脚本时,示例脚本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锁定表),以避免重复插入。