php pdo准备查询但不执行它

时间:2016-10-10 19:25:09

标签: php mysql pdo

我是php和pdos的新手。我的一个朋友基本上创建了一个pdo类和几个如何使用它的例子,这对我来说非常有用。但是现在我想做一个使用stdout mysql关键字的查询并返回符合条件的任何内容,但它只是空白。我创建了BETWEEN文件,从中我可以从中收集查询准备但未执行。我会在一秒钟内向您展示我在日志中的发现,让我快速向您展示我的代码:

mysql_query.log

这里是日志的适用部分(我整理了一下):

$newSlot = array(
    "fromDate" => $db->mysql_escape_mimic($startDate->format('Y-m-d H:i:s')),
    "untilDate" => $db->mysql_escape_mimic($endDate->format('Y-m-d H:i:s'))
  );

  $query = "SELECT * FROM schedule_slot WHERE (startDate BETWEEN :fromDate AND :untilDate) OR (endDate BETWEEN :fromDate AND :untilDate);";
  $result = $db->prepare($query);
  $slot = null;
  if($result == 1) {
    $result = $db->execute($newSlot);
    if($result == 1) {
      $slot = $db->fetch();
    }
  }
  print "slot: " . $slot["startDate"];

以下是查询日志中的一个示例,实际上对我来说很合适:

161010 20:59:31     
    2 Connect   root@localhost as anonymous on test
    2 Prepare   SELECT * FROM schedule_slot WHERE (startDate BETWEEN ? AND ?) OR (endDate BETWEEN ? AND ?)          
    2 Close stmt                
    2 Quit  

如果您希望我编辑pdo代码或其他任何内容,请告诉我,但据我所知,它是一个标准的pdo类。请让我知道为什么我的查询没有返回任何内容

修改:这是pdo类,文件名161010 21:01:07 3 Connect root@localhost as anonymous on test 3 Prepare INSERT INTO schedule_slot(startDate, endDate) VALUES(?,?) 161010 21:01:08 3 Execute INSERT INTO schedule_slot(startDate, endDate) VALUES('2016-10-11 13:35:00','2016-10-11 14:35:00') 3 Close stmt 3 Quit

dbpdo.php

1 个答案:

答案 0 :(得分:2)

首先当出现问题时,在你的<?php标签之后添加这两行,以便在LIVE服务器上开发很多人,当然会关闭错误报告,并假设他们的代码没有任何问题实际上它会产生很多错误。

<?php
error_reporting(E_ALL); 
ini_set('display_errors', 1);

然后设置PDO以抛出异常

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$newSlot = array(
                    ":f1" => $startDate->format('Y-m-d H:i:s')),
                    ":u1" => $endDate->format('Y-m-d H:i:s')),
                    ":f2" => $startDate->format('Y-m-d H:i:s')),
                    ":u2" => $endDate->format('Y-m-d H:i:s'))
                );


$query = "SELECT * FROM schedule_slot 
            WHERE (startDate BETWEEN :f1 AND :u1) 
               OR (endDate BETWEEN :f2 AND :u2)";

$result = $db->prepare($query);
// now execute the prepared query on $result not $db
$result = $result->execute($newSlot);

$row = $result->fetch_object();

print "slot: " . $row->startDate;

现在,如果发生任何错误,您将在页面上看到它们,或者您将看到异常抛出但未捕获,因此也将显示在网页上

相关问题