php - 如何让 mysqli 在 SQL 语句中使用 DELIMITER?

标签 php mysql mysqli delimiter

我正在使用 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/

相关文章:

php - 图片上传到文件夹而不是数据库

php - 警告: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given

PHP 显示所有已声明类的名称?

php - SQL 使用 replace() 选择 LIKE 结果和精确结果

MySQL 统计引用外键的属性

PHP 用户搜索,包含多个元素的表

php - MySQLi插入,数据库连接成功但插入不成功

php - MYSQL AND 查询满足同一列

php - 包括根据月份更改外部 CSS 的 PHP 脚本

javascript - 学生已存在注册系统验证 (Codeigniter)