没有使用SELECT * INTO OUTFILE创建的文件

时间:2018-02-12 10:22:50

标签: php mysql database download

我在共享主机上工作,我必须使用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运行并创建一个我可以稍后导入的文件?

3 个答案:

答案 0 :(得分:2)

Remove single quote from $backupFile

Like this

 $query      = "SELECT * INTO OUTFILE $backupFile FROM $tableName";

Otherwise it will read it as a string not as a variable where you're storing your backupfile path.

答案 1 :(得分:1)

更改

$backupFile = 'backup/mytable.sql';

$backupFile = sys_get_temp_dir() . '/mytable.sql';

然后,假设DB和PHP引擎在同一主机上运行,​​您可以阅读$ backupFile

答案 2 :(得分:0)

This solved my Problem. I had to change some little things (and mysql to mysqli). Not the best solution, but it works on shared hostings too.