PDO准备和绑定MySQL函数

时间:2015-02-26 16:54:00

标签: php function pdo escaping

我们有动态查询,其中一些人说“如果$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);
    }
}

那么,绑定这样的值的最佳方法是什么?我这样做了吗?

1 个答案:

答案 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"))
));