2013-03-09 48 views
-1

如何使用存儲過程在php中進行報告?根據我搜索的內容,存儲過程使用mysqli而不是mysql。所以我很困惑,如果這是可能的或不。你能舉一個例子來說明如何實現這個嗎?使用存儲過程在PHP中進行報告

+0

你的意思是「報告」究竟是什麼意思? – 2013-03-09 12:03:21

+0

像vb6中的報告... – 2013-03-09 12:03:55

+0

你能澄清那些是什麼嗎?另外,如何將存儲過程作爲一項要求發揮作用? – 2013-03-09 12:05:23

回答

2

如果你想調用MySQL中的存儲過程,mysqlmysqli都可以這樣做。儘管如此,無論如何,我都會推薦mysqli,因爲它只是更好(因此i;'改進';我認爲)。

你會調用存儲過程像你調用PHP中的任何其他SQL語句:

mysqli_query($link, "CALL Procedure('$strVar', $intVar, etc.)"); 

雖然我的例子使用mysqli_querymysql_query將工作一樣好。

從PHP內部創建存儲過程是不可能的,因爲雖然PHP的mysqli對象具有multi_query()函數,但它只允許;作爲分隔符。而這是很糟糕的,因爲你會需要一個您的存儲過程,但PHP將執行它們作爲單獨的查詢。

MySQL中的存儲過程作爲一個例子:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `Procedure`$$ 
CREATE PROCEDURE `Procedure` (
    IN `userid` INT 
) 
    IF EXISTS (SELECT 1 
     FROM `users` 
     WHERE `user_id` = `userid`) 
    THEN 
     SELECT `user_name` 
     FROM `users` 
     WHERE `user_id` = `userid`; 
    ELSE 
     SELECT `user_name` = 'No such user'; 
    END IF; 
END $$ 

通知你如何需要(標準定界符是;),因爲它是在存儲過程中的使用(因爲一個程序是重命名定界符許多查詢並且必須由這樣的分隔符分隔)。 $$是分隔符通常推薦的重命名。

如果我要從PHP內部運行此SQL,使用multi_query(),它會將我的查詢拆分爲;,從而導致五個查詢,這些查詢都會有語法錯誤(因爲它們是碎片)。

因此,要創建存儲過程,請爲此目的編寫一個.sql腳本。然後從終端運行腳本:如果您想了解更多關於MySQL存儲過程

$ mysql --user="$USER" --password="$PASSWORD" $DB < $FILE 

,我建議你在網絡上搜索,有很多優秀的教程。但與常規SQL語句相比,您不需要任何特殊的魔法就可以從PHP調用它們。

相關問題