0

我创建了这个程序:

 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 的值是未定义的,并且似乎该过程不起作用或未被调用。

4

2 回答 2

0

如果你想从一个例程中取回数据,你应该使用一个函数,而不是一个过程。它们具有几乎相同的语法,但最值得注意的是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

于 2013-06-17T12:40:22.863 回答
0

尝试改变

IF num==0 THEN

IF num=0 THEN
于 2013-06-17T14:43:19.263 回答