2013-03-14 25 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工作。

相关问题