簡體   English   中英

錯誤:PHP執行過程中帶引號的字符串未終止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM