2013-06-17 2 views
0

Я создал эту процедуру:Mysql хранимых процедуры и 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; 
} 
?> 

Но значение $ результата не определены и, кажется, порядок не работает или не вызывается.

ответ

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.

+0

Да, я был прийти к такому же выводу, но до сих пор не работает. Он ничего не возвращает и также не вставляет в commercianti или ошибку – Tres

+0

@Tres: Я забыл отредактировать SELECT COUNT (*). Попробуйте вместо этого использовать инструкцию SELECT INTO (ответ отредактирован выше). –

+0

Функция создается правильно, но когда она используется с php, ничего не происходит – Tres

0

Try изменения

IF num==0 THEN 

в

IF num=0 THEN 
Смежные вопросы