我们有动态查询,其中一些人说“如果$x is null
使用NOW()
,则使用传递的日期”我想知道逃脱的最佳方式是什么?
例如,这是绑定的正确方法吗?
public function doSomething($date = null){
// My wrapper for PDO
// params: Query, Replacements
$db->query("select * from my_table where date >= ?", array(
($date === null ? "now()" : $date)
));
}
这就是query
绑定的方式(如果这很重要):
protected function _bind($query, $params){
if(strpos($query, "?")){
array_unshift($params, null);
unset($params[0]);
}
foreach($params as $key => $val){
$type = $this->_getPDOType($val);
$this->stmt->bindValue($key, $val, $type);
}
}
那么,绑定这样的值的最佳方法是什么?我这样做了吗?
答案 0 :(得分:0)
是的,这似乎是正确的,但我还会检查$ date - 变量是否为实际日期(在将其放入数组之前)。
if (DateTime::createFromFormat('Y-m-d', $date) !== FALSE) {
$db->query("select * from my_table where date >= ?", array(
($date === null ? "now()" : $date)
));
}
修改强>
$date = DateTime::createFromFormat('Y-m-d', $date);
$db->query("select * from my_table where date >= ?", array(
(!$date ? "now()" : $date->format("Y-m-d H:i:s"))
));