如何将实际的SQL查询打印到文件?

时间:2009-12-27 05:17:03

标签: php mysql mysqli prepared-statement

说,这是我的查询

$stmt = "SELECT * FROM foo WHERE x=?";

如何将上述查询加上绑定参数打印到屏幕或PHP中的文件?


当我打印$stmt时,它说:

  

mysqli_stmt无法转换为字符串

这是我的代码:

if ($stmt = $this->conn->prepare($query)) { 
  $stmt ->bind_param('ss', $un, $pwd); 
  logToFile ("my.log", "inside mysql\n"); 
  logToFile ("my.log", $stmt); 

3 个答案:

答案 0 :(得分:3)

您可以使用参数占位符记录包含SQL查询的PHP变量$query

但您可能希望将查询与参数值结合使用。这是一个非常常见的请求,但是这些信息不会通过客户端库公开,因此您无法从PHP中读取它。

您可以在查询execute()时将查询与MySQL General Query Log中的参数值结合使用。

答案 1 :(得分:0)

修改

快速回答

啊,我现在明白了。您正在尝试打印阵列。您需要迭代/循环遍历它以打印每个值。 $ stmt从SQLite作为数组返回。

尝试此操作:

foreach( $stmt as $key => $value){
    echo "Key: $key, Value: $value <br />";
}

解释:

这里发生的是PHP从SQL接收数组,并且数组中的每个元素都有一个键和一个值。请考虑以下事项:

$myArray[0] = "ElementZero";
$myArray[1] = "ElementOne";
$myArray[2] = "ElementTwo";
...
$myArray[15] = "ElementFifteen";

方括号(0,1,2,15)中的数字是您的键,引号中的文字是您的值。这是一个索引数组,其中每个元素都有一个索引号。关联数组是使用字符串而不是数字来标识数组中的每个项目。快速示例:

$myArray['bob'] = "foo";
...
$myArray['joe'] = "bar";

在这个数组中,我们使用字符串作为键而不是数字。就个人而言,我在处理多维数组时只看到这个有用,但现在还不行......

祝你好运,希望这会有所帮助。

答案 2 :(得分:0)

print $query;

但你不知道$ query中的内容吗?

尝试:

print serialize($stmt);

它会告诉你stmt对象中的内容

实际上,serialize是我最喜欢的调试输出格式。