如何通过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文件?感谢。
答案 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>