我正在使用 mysqli,现在正尝试从 SQL 代码片段(由 MySQL Workbench 生成)获取一个 View 到数据库中。
$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 语句中使用定界符?
谢谢
最佳答案
这是帮助我理解这一点的来源... http://zend-framework-community.634137.n4.nabble.com/Problems-changing-the-sql-end-of-statement-delimiter-tp2124060p2124276.html
DELIMITER is not an actual MySQL Statement.
我相信这只是一些 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 。
关于php - 如何让 mysqli 在 SQL 语句中使用 DELIMITER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418218/