【问题标题】:How to print the actual SQL query to a file? [closed]如何将实际的 SQL 查询打印到文件中? [关闭]
【发布时间】:2009-12-27 05:17:03
【问题描述】:

说,这是我的查询

$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); 

【问题讨论】:

  • 如果您要提出错误的问题,请发布代码!我们不介意读者。
  • 这里是: if ($stmt= $this->conn->prepare($query)) { $stmt ->bind_param('ss', $un, $pwd); logToFile("my.log","inside mysql\n"); logToFile("my.log",$stmt);
  • 这对我来说很有意义。他有一个准备好的查询。准备好后,它不会存储为字符串,您无法从中获取简单的 SQL 查询作为字符串。不过,我并不是 100% 同意这一点,所以我将对此发表评论。

标签: php mysql mysqli prepared-statement


【解决方案1】:

您可以记录您的 PHP 变量 $query,其中包含带有参数占位符的 SQL 查询。

但您可能希望结合参数值记录查询。这是一个很常见的请求,但是这个信息并没有通过客户端库暴露出来,所以你无法从 PHP 中读取。

您可以将查询与 MySQL General Query Log 中的参数值结合起来,就像您 execute() 查询一样。

【讨论】:

    【解决方案2】:
    print $query;
    

    但你不知道 $query 中有什么吗?

    尝试:

    print serialize($stmt);
    

    它会告诉你 stmt 对象中有什么

    其实serialize是我最喜欢的调试输出格式。

    【讨论】:

      【解决方案3】:

      编辑:

      快速回答

      啊,我现在明白了。您正在尝试打印一个数组。您需要迭代/循环它以打印每个值。 $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";
      

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

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

      【讨论】:

      • Moshe,这给出了一个错误。 >可捕获的致命错误:类 mysqli_stmt 的对象无法在第 29 行的 H:\wamp\www\magicmall\classes\Mysql.php 中转换为字符串
      猜你喜欢
      • 2011-08-03
      • 2012-02-04
      • 2017-06-17
      • 2011-10-27
      • 2018-04-17
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多