我对php和pdos非常陌生。我的一位朋友基本上创建了一个pdo类和一些如何使用它的例子,这对我来说非常有用。但是现在我想要使用BETWEEN
mysql关键字执行查询,并返回与条件匹配的任何内容,但它只是空白。我创建了mysql_query.log
文件,并从我可以从中收集的查询准备好但未执行。我会告诉你从日志中第二我的发现,让我赶紧只是告诉你我的代码:php pdo准备查询但不执行它
$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 [email protected] as anonymous on test
2 Prepare SELECT * FROM schedule_slot WHERE (startDate BETWEEN ? AND ?) OR (endDate BETWEEN ? AND ?)
2 Close stmt
2 Quit
下面是从日志查询的一个例子,实际上制定了罚款对我来说:
161010 21:01:07
3 Connect [email protected] 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
我们,如果你要我编辑的PDO代码或其他任何东西的,但据我可以我知道告诉它是一个标准的pdo类。请让我知道为什么我的查询不返回任何东西
编辑:这里的PDO类,文件名dbpdo.php
:
<?php
class dbpdo {
private $_connection;
private $_statement;
public function __construct() {}
public function connect($host, $username, $password, $database) {
$connect = 'mysql:host='.$host.';dbname='.$database.';charset=utf8mb4';
$this->_connection = new PDO($connect, $username, $password);
$this->_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
public function __destruct() {
if ($this->_connection)
$this->_connection = null;
}
public function query($query){
try {
return $this->_connection->query($query);
} catch(PDOException $e) {
return "Error: " . $e->getMessage();
}
}
public function fetch(){
try {
return $this->_statement->fetch();
} catch(PDOException $e) {
return "Error: " . $e->getMessage();
}
}
public function prepare($query) {
try {
$this->_statement = $this->_connection->prepare($query);
return 1;
} catch(PDOException $e) {
return "Error: " . $e->getMessage();
}
}
public function execute($array) {
try {
$this->_statement->execute($array);
return 1;
} catch(PDOException $e) {
return "Error: " . $e->getMessage();
}
}
public function mysql_escape_mimic($inp) {
if(is_array($inp))
return array_map(__METHOD__, $inp);
if(!empty($inp) && is_string($inp)) {
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
}
return $inp;
}
}
什么是'mysql_escape_mimic',如果你正在使用一个准备好的参数化查询语句,为什么你会这样做呢 – RiggsFolly
你有4个参数,只有2个值在数组中! – RiggsFolly
'“SELECT * FROM schedule_slot WHERE(startDate BETWEEN:f1 AND:u1)OR(endDate BETWEEN:f2 AND:u2);”;'和chnage相应的数组以保存4个参数 – RiggsFolly