php - mysql 从批处理创建索引与 CLI 或 GUI 的比较

标签 php mysql mysql-workbench etl

我正在尝试将 mysql 中现有(和填充的)表索引为 PHP 中 ETL 脚本的一部分。我有两个索引语句(将此称为 create_index.sql):

create index my_index_1 on my_table (my_col_1);
create fulltext index my_index_2 on my_table (my_col_2 asc, my_col_3 asc);

这是通过 PHP 自动执行的,在填充后通过加载 SQL(文本)文件并批量执行来运行:

$conn = new mysqli('my_host', 'my_user', 'my_pass', 'my_db');
$result = $conn->query(file_get_contents('create_index.sql');
if (false === $result)
    error_log($conn->error);

当按照上面列出的方式执行时(通过 PHP),我收到一条标准的“您的 SQL 语法中有错误”消息。

在 MySQL Workbench 中执行时,两条 create index 语句完全相同,运行没有错误。

有人可以指出 GUI 在我假设的语句之间所做的不同操作的方向,这会导致相同语句产生不同的结果吗?我是不是找错树了?

最佳答案

您需要分别执行文件中的每条SQL语句。语句的拆分可能会更优雅,但根据您在问题中显示的内容,这应该有效:

$conn = new mysqli('my_host', 'my_user', 'my_pass', 'my_db');
$sql_file_text = file_get_contents('create_index.sql');
$sql = explode(';',$sql_file_text);
foreach($sql as $key => $sql_statement) {
    if($sql_statement != '') {
        $result = $conn->query($sql_statement);
        if (false === $result) {
            error_log($conn->error);
        }
    }
}

关于php - mysql 从批处理创建索引与 CLI 或 GUI 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43399530/

相关文章:

php - 如何通过 php 为更新、插入、删除的 WHERE 子句选择 mysql 行 ID?

php - 使用 PDO 的 SELECT 查询失败,在 phpMyAdmin 中有效

MySQL 查询未给出预期结果

mysql - MySQL 中的定义表哪种字段结构更好?

mysql - 在 Windows Server 2012 R2 上安装 C++ Redistributable 2015 时出错

mysql - 初学者 : Can't Order my WHERE Statements Properly with Subselect MIN?

php - 外键、连接和返回索引

java - 从 Java 向 MySQL 插入/更新 blob

MySQL 限制,无法协同工作

php - 在网格中平铺缩略图