2014-01-08 60 views
0

我想打印我的SQL語句,到調試文件:如何防止通配符在exec()中被解釋?

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name" , $db_user, $db_password); 
$sql = "SELECT * from $db_table"; 

// do somethings ... 

// Print SQL statement to file for debugging 
exec(" echo DEBUG: $sql > /tmp/sql.debug "); 

$statement = $dbh->prepare($sql); 
$statement->execute(); 
$result = $statement->fetchAll(); 

但通配符將在工作目錄被解釋爲文件列表,所以我得到的結果鏈接纔可這個

$ cat /tmp/sql.debug 
SELECT **1.php 2.php 3.php** from syslog WHERE program = xxx AND ip = 192.168.1.1 

如何我可以防止通配符在exec()中被解釋,以獲得正確的調試消息嗎?

+0

shell接受反斜槓作爲轉義字符。您必須在PHP中再次使用反斜槓,所以請嘗試:'select $ * db_table'# – Andomar

+0

再次轉義反斜槓將獲得正確的調試消息,但是PDO查詢將失敗。 – Brightshine

回答

2

您不需要使用exec來調用echo命令。

PHP本機功能error_log可以達到您的要求。

error_log($sql, 3, '/tmp/sql.debug'); 

您的代碼的修復是引用您的SQL字符串進行回顯。

exec(" echo 'DEBUG: $sql' > /tmp/sql.debug "); 
相關問題