[英]Error: Unterminated quoted string during PHP exec
我在PHP中使用exec
函數,使mysql將查詢的內容轉儲到CSV文件中。
這是我的代碼:
$outfile = '/home/dotslash/file.csv';
$emails_table = 'all_emails';
$host = 'localhost';
$user = 'root';
$pass = 'root';
$dbname = 'test';
$query = "SELECT DISTINCT(emailid), COUNT(emailid), GROUP_CONCAT(DISTINCT offers) FROM '" . $emails_table . "' GROUP BY emailid INTO OUTFILE '" . $outfile . "' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';";
exec("mysql -h$host -u$user -p$pass $dbname -e '$query'");
我得到這個錯誤: sh: 2: Syntax error: Unterminated quoted string
我知道當字符串從PHP傳遞到bash時,問題正在轉義,但是我無法弄清楚我在做什么錯。 請幫忙!
您已連接到數據庫嗎? 在您的腳本中,似乎沒有...在數據庫信息之后添加以下字符串:
$con = mysql_connect($host, $user, $pass);
mysql_select_db($dbname);
並在腳本末尾添加:
mysql_close($con);
因此您的代碼如下所示:
$outfile = '/home/dotslash/file.csv';
$emails_table = 'all_emails';
$host = 'localhost';
$user = 'root';
$pass = 'root';
$dbname = 'test';
$con = mysql_connect($host, $user, $pass);
mysql_select_db($dbname);
$query = "SELECT DISTINCT(emailid), COUNT(emailid), GROUP_CONCAT(DISTINCT offers) FROM '" . $emails_table . "' GROUP BY emailid INTO OUTFILE '" . $outfile . "' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';";
exec("mysql -h$host -u$user -p$pass $dbname -e '$query'");
mysql_close($con);
您的SQL中可能存在問題
... ENCLOSED BY '\"' ...
嘗試將其替換為:
$enc = '"';
... ENCLOSED BY '".$enc."' ...
因此,您的最終代碼將是:
$outfile = '/home/dotslash/file.csv';
$emails_table = 'all_emails';
$host = 'localhost';
$user = 'root';
$pass = 'root';
$dbname = 'test';
$con = mysql_connect($host, $user, $pass);
mysql_select_db($dbname);
$enc = '"';
$query = "SELECT DISTINCT(emailid), COUNT(emailid), GROUP_CONCAT(DISTINCT offers) FROM '" . $emails_table . "' GROUP BY emailid INTO OUTFILE '" . $outfile . "' FIELDS TERMINATED BY ',' ENCLOSED BY '".$enc."' LINES TERMINATED BY '\n';";
exec("mysql -h$host -u$user -p$pass $dbname -e '$query'");
mysql_close($con);
如果這樣不能解決您的問題,請嘗試使用串聯來傳遞$ query var,如下所示:
exec("mysql -h$host -u$user -p$pass $dbname -e ".$query."");
也可以嘗試使用var_dump這樣的$ query:
var_dump($query);
因為您可能需要先獲取結果,然后才能將其傳遞給exec命令。
專家提示:檢查您的SQL命令是否正確,直接從phpmyadmin上的數據庫傳遞命令,並檢查它是否拋出錯誤。
執行$ query的var_dump,並在phpmyadmin或其他sqlmanager的SQL控制台中將返回的字符串由var_dump放置后,查看結果。
抱歉我的英語是法語
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.