我想将我的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()中解释通配符,以获得正确的调试消息?
答案 0 :(得分:2)
您无需使用exec
来调用echo
命令。
PHP原生函数 error_log 可以满足您的要求。
error_log($sql, 3, '/tmp/sql.debug');
您的代码的修复是引用您的sql字符串以进行回显。
exec( " echo 'DEBUG: $sql' > /tmp/sql.debug " );