【发布时间】:2014-01-08 09:04:11
【问题描述】:
我想将我的 SQL 语句打印到调试文件中:
$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() 中被解释,以获得正确的调试消息?
【问题讨论】:
-
shell 接受反斜杠作为转义字符。您必须在 PHP 中再次转义反斜杠,因此请尝试:
select \\* from $db_table -
再次转义反斜杠会得到正确的调试信息,但 PDO 查询会失败。