【发布时间】:2018-02-12 10:22:50
【问题描述】:
我在共享主机上工作,我必须使用 PHP 导出 MySQL 数据库,因为我有一个客户希望能够导入和导出他们的数据库。
我搜索了互联网,发现看起来很简单,我在主机的子目录中创建了以下文件。
<?php
include "connect.php";
if($conn->connect_errno > 0) {
die('Connection failed [' . $db->connect_error . ']');
}
$tableName = 'questions';
$backupFile = 'backup/mytable.sql';
$query = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysqli_query($conn,$query);
?>
我试过了,它似乎可以工作(error_log 文件中没有错误。),但它没有创建文件。
我尝试了不同的输出文件夹、文件和文件类型,但这改变了一切。
我发现其他人用INTO OUTFILE进行了探测,因为mysql用户没有足够的权限。我怎样才能知道呢?那它不应该给我一个错误吗?
是否有一个简单(或不简单)的替代 INTO OUTFILE,我可以使用 PHP 运行并创建一个可以稍后导入的文件?
【问题讨论】:
-
如果我没记错的话,INTO OUTFILE 是相对于数据库服务器的文件系统上的一个目录。不是您的脚本正在运行的那个。由于您使用的是共享主机,因此它们很可能不在同一台服务器上,或者如果它们在同一台服务器上,那么您需要使用指向您想要文件的位置的绝对路径。
-
mysqli_query是否返回true?如果不是,mysqli_error的结果是什么?你在哪里寻找文件? (在数据库服务器上,我希望...) -
@KarlHofmann 就像我说的,它可能不在那个服务器上(或者如果是,也许你没有读取权限)
-
如果查询失败,那么 mysqli_error 至少应该给你一些东西。
-
@KarlHofmann 我只见过hand-rolling stuff using fputcsv 的人,但我想有它的库......
标签: php mysql database download