【问题标题】:Mysql Stored Procedure and PhpMysql存储过程和Php
【发布时间】:2013-06-17 12:24:18
【问题描述】:

我已经创建了这个程序:

 DROP PROCEDURE IF EXISTS add_com;
DELIMITER //
CREATE PROCEDURE add_com (cd CHAR(16), n VARCHAR(20), t VARCHAR(20), i VARCHAR(20))
BEGIN
  DECLARE num INT;
  DECLARE msg varchar(20);
set @num=select COUNT(*) from commercianti where codice_fiscale=cd;
  IF num==0 THEN
    insert into commercianti values (cd,n,i,t);
    set @msg="Commerciante inserito";
  ELSE
    insert into errors values (1);
    set @msg="Commerciante presente";
  END IF;
return @msg;
END; //

然后在 PHP 页面中我执行以下代码:

 <?php
$cd=$_POST['codice_fiscale'];
$n=$_POST['nominativo'];
$t=$_POST['telefono'];
$i=$_POST['indirizzo'];
if(!$cd||!$n||!$t||!$i)
echo "No data";
else{
require dirname(__FILE__) . '/' . 'dbconfig.php';
$mysqli = new MySQLI(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$result = $mysqli->query("CALL add_com('$cd','$n','$t','$i')");
echo $result;
}
?>

但是 $result 的值是未定义的,并且似乎该过程不起作用或未被调用。

【问题讨论】:

    标签: php mysql stored-procedures return-value


    【解决方案1】:

    如果你想从一个例程中取回数据,你应该使用一个函数,而不是一个过程。它们具有几乎相同的语法,但最值得注意的是声明的 RETURNS type 部分。看看官方文档:

    http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

    请注意,第二个创建块是关于功能的。第一个处理程序。

    所以我认为应该是这样的:

    DROP FUNCTION IF EXISTS add_com;
    
    DELIMITER //
    
    CREATE FUNCTION add_com (cd CHAR(16), n VARCHAR(20), t VARCHAR(20), i VARCHAR(20))
    RETURNS VARCHAR(20)
    BEGIN
        DECLARE num INT;
        DECLARE msg varchar(20);
    
        SELECT COUNT(*) INTO @num FROM commercianti WHERE codice_fiscale = cd;
    
        IF num==0 THEN
            insert into commercianti values (cd,n,i,t);
            set @msg="Commerciante inserito";
        ELSE
            insert into errors values (1);
            set @msg="Commerciante presente";
        END IF;
        return @msg;
    END; //
    

    我不是 100% 确定 RETURNS VARCHAR(20)。那可能只是RETURNS VARCHAR。

    【讨论】:

    • 是的,我得出了同样的结论,但还是不行。它不会返回任何东西,也不会插入到 commercianti 或错误中
    • @Tres:我忘记编辑 SELECT COUNT(*)。尝试改用 SELECT INTO 语句(答案在上面编辑)。
    • 函数创建正确,但是从php中使用时没有任何反应
    • @Tres:我不太了解 php。我能读,但不能写。假设您对 SELECT INTO 进行了更改,我唯一能想到的另一件事是在 php 代码中的 sql 调用末尾添加一个分号:$result = $mysqli-&gt;query("CALL add_com('$cd','$n','$t','$i');");。有时,如果你不包含;,sql 调用将永远不会真正进行,因为它正在等待语句结束分隔符。
    【解决方案2】:

    尝试改变

    IF num==0 THEN
    

    到

    IF num=0 THEN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2011-06-23
      • 2015-11-09
      • 2016-06-24
      • 2013-09-10
      • 1970-01-01
      • 2011-02-10
      相关资源
      最近更新 更多