2013-03-14 43 views
1

我正在使用mysqli並試圖從SQL代碼片段(由MySQL Workbench生成)獲取視圖到數據庫中。如何在SQL語句中使用DELIMITER獲取mysqli?

$query = <<<QUERY 
DROP VIEW IF EXISTS `myview` ; 
SHOW WARNINGS; 
DROP TABLE IF EXISTS `myview`; 
SHOW WARNINGS; 
DELIMITER $$ 
CREATE OR REPLACE VIEW `myview` AS 

...view definition... 

$$ 
DELIMITER ; 

; 
SHOW WARNINGS; 

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
QUERY; 

$result = mysqli_multi_query($dbConnection, $query); 

這沒有用。沒有錯誤,聲明似乎只是被忽略。如果刪除分隔符定義(行DELIMITER $$,$$DELIMITER ;),它才起作用。

爲什麼它不起作用?我可以/應該如何在SQL語句中使用分隔符傳遞給mysqli函數和方法?

THX

+0

你不能。使用['mysqli_query()'](http://www.php.net/manual/en/mysqli.query.php)將整個'CREATE VIEW'操作(包括其嵌入的';'分隔符)作爲一個單獨執行聲明。 – eggyal 2013-03-14 20:33:20

+0

謝謝您的回覆!我在[MySQLi文檔](http://www.php.net/manual/en/book.mysqli.php)中找不到任何關於它的信息。你能解釋一下,爲什麼它是不可能的。或者只是提供一個鏈接你的信息源。 – automatix 2013-03-14 22:06:26

+2

'DELIMITER'不是服務器端聲明。它是由'mysql'命令行客戶端識別的客戶端命令(也可能是其他的)。它不被'mysqli'驅動程序識別,因此文檔中沒有任何內容。文檔沒有提到任何改變'mysqli'驅動程序語句分隔符的方法。我沒有提及引用。 – eggyal 2013-03-14 22:13:43

回答

-2

這是幫助我理解這個源... http://zend-framework-community.634137.n4.nabble.com/Problems-changing-the-sql-end-of-statement-delimiter-tp2124060p2124276.html

DELIMITER不是實際的MySQL聲明。

我相信這只是一些MySQL客戶端已經實現的功能,以幫助同時發送一堆sql語句。

mysqli驅動程序沒有實現此功能。

所以,這應該工作。

$query = <<<QUERY 
DROP VIEW IF EXISTS `myview` ; 
SHOW WARNINGS; 
DROP TABLE IF EXISTS `myview`; 
SHOW WARNINGS; 

CREATE OR REPLACE VIEW `myview` AS 

...view definition... 

; 
SHOW WARNINGS; 

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
QUERY; 

$result = mysqli_multi_query($dbConnection, $query); 

我遇到了同樣的問題,同樣的mysqli驅動力,multi_query功能(使用分隔符在創建程序),並刪除DELIMITER從我的SQL工作。

相關問題