如何防止在exec()中解释通配符?

时间:2014-01-08 09:04:11

标签: php sql shell wildcard

我想将我的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();

但是通配符将被解释为工作目录中的文件列表,所以我得到了结果liks this

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

如何防止在exec()中解释通配符,以获得正确的调试消息?

1 个答案:

答案 0 :(得分:2)

您无需使用exec来调用echo命令。

PHP原生函数 error_log 可以满足您的要求。

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

您的代码的修复是引用您的sql字符串以进行回显。

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