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