如何获得的mysqli与SQL语句分隔符的工作?(How to get mysqli working

2019-07-21 16:12发布

我使用的mysqli现在想从一个SQL代码段(由MySQL工作台产生的)到数据库的视图。

$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);

这doen't工作。 没有错误,语句似乎只是被忽略。 它仅适用,如果我删除分隔符定义(线DELIMITER $$$$DELIMITER ;

为什么不工作? 有什么可以/我应该怎么做,以使用传递到SQL语句分隔符mysqli函数和方法?

谢谢

Answer 1:

这是帮助我理解这个源... 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 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工作。



文章来源: How to get mysqli working with DELIMITERs in SQL statements?