微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

API 平台原始查询

如何解决API 平台原始查询

任何人都知道如何在 API 平台控制器/处理程序中获取原始查询

我正在尝试做类似的事情

 $temp_table_query = $this->entityManager->createquery('CREATE TEMPORARY TABLE {temp_validation_code_table} LIKE {validation_code}');
        $qb = $this->entityManager->createqueryBuilder();
        $qb = $qb->select('LOAD DATA LOCAL INFILE {$file} INTO TABLE {temp_validation_code_table} (code) SET offer = {$offer}');

在插入实际数据库表之前尝试将文件数据加载到临时表中进行验证

解决方法

这需要使用底层 Doctrine PDO 抽象(Doctrine\DBAL\Connection)来完成,它可以通过 $entityManager->getConnection(); 获得。

但是,首先,您需要确保将基础 PDO 连接配置为允许 LOAD LOCAL INFILE(通过将 PDO::MYSQL_ATTR_LOCAL_INFILE 设置为 true)。这可以通过提供以下 Doctrine 配置(在 doctrine.yaml 中)来完成:

doctrine:
    dbal:
        #...
        options:
            1001: true # This sets PDO::MYSQL_ATTR_LOCAL_INFILE to true

请注意,允许 LOAD LOCAL INFILE 可能会引入安全漏洞。

假设我有一个名为 example.csv 的文件,其中包含以下 CSV 数据:

1,"foo"
2,"bar"
3,"baz"

然后我可以使用 Doctrine PDO 抽象插入这些数据:

<?php
//...
// Local path to the CSV file
$file = __DIR__ . '/example.csv';
// Obtaining the PDO connection
$connection = $this->entityManager->getConnection();
// Creating the temporary table
$connection->executeStatement('CREATE TEMPORARY TABLE foobar (id int AUTO_INCREMENT PRIMARY KEY,name VARCHAR(256) NOT NULL)');
// Inserting the CSV data
$connection->executeStatement("LOAD DATA LOCAL INFILE '$file' INTO TABLE foobar FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。