MySQL,OUTFILE:是否可以将查询结果存储到变量而不是文件中

时间:2015-04-18 11:30:29

标签: php mysql permissions backup database-backups

我正在尝试使用php备份表记录。我使用以下代码来获取数据:

 $table_name = "my_table";
 $backup_file  = dirname(__FILE__)."/backup/my_table.sql";
 $sql = "SELECT * INTO OUTFILE '$backup_file' FROM $table_name";
 $retval = mysql_query( $sql, $conn );

但是,最后一行给出了以下错误:

用户'user_name'@'10.1.1.9'拒绝访问(使用密码:是)

我将backup目录及其文件的文件权限更改为777。但仍然存在同样的错误。

现在,我想知道,在 SELECT * INTO OUTFILE 中,是否可以将备份数据存储到变量(而不是文件)中。那么我可以将该变量存储到文件中吗?

2 个答案:

答案 0 :(得分:1)

评论时间有点长。

你不是真的"备份"桌子。您只是复制其内容。如果这对于您想要完成的任务已足够,那么只需一次读取一条记录,然后将它们写入文件即可。这是一个php循环。

您面临的问题是服务器对文件所在的目录没有权限。也许有一种方法可以赋予服务器权限或使用安装在服务器和客户端计算机上的公共文件系统。

"备份"和"恢复"是应用于整个数据库的概念及其中的所有内容,包括表,表结构,约束,视图,存储过程,用户定义的函数,触发器等。您可以阅读有关内置功能here的更多信息。

答案 1 :(得分:1)

  

用户'user_name'@'10.1.1.9'的访问被拒绝(使用密码:是)

此错误不是拒绝访问文件系统,而是访问数据库 您正尝试使用名为user_name的用户和密码连接到数据库。并且它没有访问权限(可能是错误的名称或密码?)。

如果您不想将查询结果存储到变量中,可以通过删除查询的INTO OUTFILE部分来完成此操作:

"SELECT * FROM $table_name"

虽然我们参与其中,但我建议您停止使用旧版PHP提供的mysql_* API。它是一个糟糕且已弃用的API,将在以后的版本中删除 请改为mysqliPDO