php - XAMPP 中的错误 Mysql OUTFILE 路径

标签 php mysql xampp

我正在构建一个从 Mysql 表输出 CSV 的 PHP 脚本,但它每次都会将文件保存在 mysql/data/export.csv 路径中,而不是指定的路径中。我究竟做错了什么 ?我正在使用 XAMPP 本地服务器。

PHP 代码:

<?php
require_once __DIR__ . DIRECTORY_SEPARATOR . "master.php";

$export_path =  __DIR__ . DIRECTORY_SEPARATOR . "export" . DIRECTORY_SEPARATOR . "export.csv";

$query = <<<SQL
SELECT op,cid,lac,rnc,lat,lng,ratio,data,rfu
FROM cells
INTO OUTFILE '?'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';
SQL;

$statement = db()->prepare($query);
$statement->execute([$export_path]);

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="export.csv";');
readfile($export_path);

附注如果我删除 INTO OUTFILE '?' 中问号中的引号,则会出现以下错误:

PDO::prepare(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? FIELDS TERMINATED BY ';' LINES TERMINATED BY ' '' at line 3 in C:\xampp\htdocs\celldb\export.php on line 14

最佳答案

这不是clearly documented但我怀疑 SELECT...INTO OUTFILE 构造不支持绑定(bind)参数。这就是为什么当您运行固定代码时,占位符会出现在错误消息中(像原始代码一样传递文字 '?' 字符串显然没有机会工作 - 事实上我是很惊讶您在错误的目录中得到了正确的文件名)。

如果让 PHP 模拟准备好的语句,它确实有效:

$pdo = new PDO(..., [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => true,
]);

...因为这样它是客户端操作。但在项目生命周期的中期这样做可能会破坏其他事情。一个更安全的选择是避免在这里准备好的语句:

$query = sprintf(<<<SQL
SELECT op,cid,lac,rnc,lat,lng,ratio,data,rfu
FROM cells
INTO OUTFILE '%s'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';
SQL
, $db()->quote($export_path));

关于php - XAMPP 中的错误 Mysql OUTFILE 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676950/

相关文章:

php - Magento 1.6.2 无法重新索引产品平面数据

php - 使用扩展名为 api_ 的 acos、aros 和 aros_acos Acl 表的 CakePHP 自定义 ACL 授权

apache - .Htaccess - 服务器错误

php - 将 Webform 推送到 vTiger

php - 从 php 文件到 phpmyadmin 的数据库连接失败?

directory - xampp 包括不工作

php - 使用 Codeception 和 Laravel4 找不到模型类

php - 添加到组的 www-data 用户无法在具有组权限的文件夹中写入/删除

java - 带有 Java 的动态 SQL 查询

python - orm ['model' ].objects.create(attr=some_value) 导致 IntegrityError