我是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
答案 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;
现在,如果发生任何错误,您将在页面上看到它们,或者您将看到异常抛出但未捕获,因此也将显示在网页上