【问题标题】:Stored procedure strange error when called through php通过php调用存储过程奇怪的错误
【发布时间】:2012-06-06 00:55:58
【问题描述】:

我一直在用 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')");
     }
 ?>

我无法找出错误。

提前致谢, 拉维。

【问题讨论】:

  • 您收到的错误信息是什么?
  • 您是否通过回显检查了 $rows 返回的内容?
  • 那么它返回了什么?
  • 一些不相关的提示:一个有效的电子邮件地址最多可以包含 253 个字符。您应该使电子邮件地址成为唯一索引,然后尝试插入而不是先选择然后插入。但是,如果您想继续按照自己的方式进行操作,您应该使用 SELECT FOR UPDATE 和事务(或使用 MyISAM 的 LOCK TABLES)来避免重复插入。

标签: php mysql stored-procedures


【解决方案1】:

我在使用 php 脚本执行存储过程和查询时遇到了类似的问题。

您应该尝试mysqli_multi_query 来执行您的 SP。
调用程序后。使用 mysqli_free_result 来使用结果。
您也可以参考this link。希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2020-05-17
    • 1970-01-01
    • 2013-12-10
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多