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

MySQL,OUTFILE: Is it possible to store query result into a variable instead of a file

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

 $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'(使用密码:YES)

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

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

评论有点长

你并不是真正的 "backing up" table。您只是在复制其内容。如果这足以满足您想要完成的任务,那么只需读回记录,一次一个,然后将它们写入文件。这是一个 php 循环。

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

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

Access denied for user 'user_name'@'10.1.1.9' (using password: YES)

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

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

"SELECT * FROM $table_name"

虽然我们正在这样做,但我建议您停止使用旧版本 PHP 提供的 mysql_* API。它是一个糟糕且已弃用的 API,将在未来的版本中删除。
请查看 mysqliPDO