簡體   English   中英

Mysql存儲過程和PHP

[英]Mysql Stored Procedure and Php

我創建了以下過程:

 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的值是不確定的,似乎該過程不起作用或沒有被調用。

如果要從例程中獲取數據,則應使用函數而不是過程。 它們具有幾乎相同的語法,但最值得注意的是聲明的RETURNS type部分。 看一下官方文檔:

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

注意,SECOND create塊中有一個與功能有關的塊。 第一個處理程序。

所以我認為這看起來像這樣:

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; //

我不太確定RETURNS VARCHAR(20) 那可能僅僅是RETURNS VARCHAR

嘗試改變

IF num==0 THEN

IF num=0 THEN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM