通过PHP获取MySQL文件?

时间:2011-11-29 18:03:21

标签: php mysql

如何通过php?

获取.sql文件,如下所示
CREATE DATABASE IF NOT EXISTS data_base;
USE data_base;
CREATE TABLE IF NOT EXISTS the_table( 
    package_name varchar(50) NOT NULL,
    PRIMARY KEY (`package_name`)
)

我尝试了以下方法,但它不起作用。我试图做一些研究,似乎我需要做一些叫做LOAD DATA INFILE的事情,但我不明白。

mysql_query("source C:/xampp/htdocs/Project1/mysql/source.sql;") or die(mysql_error());

如何使用PHP获取.sql文件?感谢。

3 个答案:

答案 0 :(得分:5)

即使使用mysqli :: multi_query(),也不能只运行SQL脚本。 SQL脚本可以包含一些仅由mysql客户端识别为builtin commands的命令,而不是MySQL服务器的SQL解析器。

SOURCE绝对是由mysql客户端预处理的命令。服务器不理解该命令。因此,您无法使用查询API在服务器上执行SOURCE

如果您可以限制SQL脚本的内容以排除mysql客户端内置命令,则可能使用mysqli :: multi_query()。但它不适用于SQL脚本中允许的完整命令集。

另请参阅我对Running MySQL *.sql files in PHP

的回答

LOAD DATA INFILE不执行SQL语句来创建表,它只是将文本文件的字段加载到现有表中。

答案 1 :(得分:3)

您将mysql命令行语句与PHP函数调用混合在一起。做一个或另一个。

利用mysql CLI(如果有):

// executing mysql cli
exec("mysql < test.sql");

或者使用mysqli_multi_query()运行SQL:

// running the files contents in bulk
$sql= file_get_contents('test.sql');
mysqli_multi_query($sql);

注意:这是一个潜在的安全风险。请注意。

答案 2 :(得分:0)

好的,这是我偶然发现的一个非常旧的,但我没有看到有人提到我一直为我工作的东西——注意我没有查过这个,只是想了一下,它奏效了所以我已经使用它多年了,可能不是最安全的方式。 如果查询已经在 .sql 文件中,我总是将其作为文本文件读取,并使用 php 中的 fgets() 函数一次传递一行。

例如,如果这是在 .sql 文件中。

CREATE DATABASE Testing123;
USE Testing123;
CREATE TABLE testData(name VARCHAR(32), age INT, town VARCHAR(32));
INSERT INTO testData(name, age, town) VALUES('Chris', 42, 'Clarksville');

然后使用此 html 表单从网页上传:

<form method="POST" action="import_sql_file.php" enctype="multipart/form-data">
    <p><input type="file" name="data"/></p>
    <p><input type="submit" value="Import"/></p>
</form>

我一直用来将其导入数据库的 import_sql_file.php 脚本如下所示:

<?php
    $file = $_FILES['data']['tmp_name'];
    $db = new mysqli("localhost", "root", "");
    $fromFile = fopen($file, "r");
    while(!feof($fromFile)){
        $query = fgets($fromFile);
        $db->query($query);
    }
    $db->close();
?>

使用 SOURCE $_FILES['data']['tmp_name'] 在我第一次尝试时失败了,然后这个想法在第二次尝试中奏效,所以我从来没有真正研究过使用 SQL 命令来做这件事的更直接的方法。< /p>