我制作了一个从txt文件启动sql查询的php脚本。但无法弄清楚为什么它无法在txt文件中看到查询。
PHP:
<?php
$dbhost = 'localhost:3036';
$dbuser = 'user';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully!';
$txt = file_get_contents('sql_query.txt');
$queries = explode(';', $txt);
foreach($queries as $sql){
mysql_query($sql);
}
mysql_select_db('db');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not complete query - error!!!' . mysql_error());
}
echo "Success!!!\n";
mysql_close($conn);
?>
错误是“无法完成查询 - 错误!!!查询为空”。 sql_query.txt文件包含UPDATE ... SET ... WHERE ...等查询;插入 ...;等
答案 0 :(得分:0)
查看错误发生的位置:在
之后$retval = mysql_query( $sql, $conn );
从那里回溯,$sql
的价值是多少?好吧,自从你退出循环后你还没有设置它,所以不管数组的最后一个值是什么。
现在我还没有看到您的文本文件中的内容,但我猜测它在最后一次查询后以换行符结束 - 例如:
SELECT * FROM foo;\n
SELECT * FROM bar;\n
如果是这种情况,那么$sql
的最后一个值可能是&#34; \ n&#34;,这显然不是SQL语句。
答案 1 :(得分:0)
你在这里遇到了几个问题。你在foreach循环之外打电话给mysql_query
......看起来并不正确。
此处发生的事情发生在foreach
的末尾,变量$sql
仍然存在。你实际上只是在循环之后检查返回值,所以实际上你的文件可能没什么问题,尽管你似乎在它的末尾有一个;
字符,然后没有查询。这使得$queries
的最后一个元素为空字符串。
您需要在循环中移动支票,如下所示:
foreach($queries as $sql){
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not complete query - error!!!' . mysql_error());
}
}
注意这些评论 - mysql_query
等已经过时了。
答案 2 :(得分:0)
考虑下拉到命令行:
$dbuser = 'user';
$dbpass = 'password';
$sql_file = '/path/to/sql_query.txt';
$command = escapeshellcmd('mysql -u ' . $dbuser . ' -p' . $dbpass . ' < ' . $sql_file);
echo exec($command);
或者,如果您决定使用mysqli
而不是mysql
(正如其他人已经注意到的那样),您可以使用multi_query功能。
$dbhost = 'localhost:3036';
$dbuser = 'user';
$dbpass = 'password';
$sql_file = '/path/to/sql_query.txt';
// instantiate mysqli object
$db = new mysqli($dbhost, $dbuser, $dbpass);
if($db->connect_error) {
die('MySQL connection failed with: ' . $db->connect_error);
}
$sql = trim(file_get_contents($sql_file));
// execute query
if ($result = $db->multi_query($sql)) {
do {
// do something with each query result if needed
$query_result = $db->store_result();
} while ($db->next_result());
} else {
die('Query failed with: ' . $db->error);
}