3

我正在使用 mysqli,现在尝试从 SQL 代码片段(由 MySQL Workbench 生成)中获取视图到数据库中。

$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 SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
QUERY;

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

这行不通。没有错误,该声明似乎只是被忽略了。仅当我删除定界符定义(行、、和)时,它DELIMITER $$$$有效DELIMITER ;

为什么它不起作用?我可以/应该做什么来在传递给mysqli函数和方法的 SQL 语句中使用分隔符?

谢谢

4

1 回答 1

-2

这是帮助我理解这一点的来源...... http://zend-framework-community.634137.n4.nabble.com/Problems-sharing-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 SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
QUERY;

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

我遇到了同样的问题,使用相同的 mysqli 驱动程序,使用 multi_query 函数(在创建过程时使用分隔符)并从我的 SQL 中删除DELIMITER 。

于 2016-03-24T13:47:10.450 回答