无脂肪:使用复杂的SQL查询

时间:2012-07-12 01:53:37

标签: php pdo fat-free-framework

问题:在Fat Free Framework中运行更复杂的SQL查询是否更容易/更安全?我的解决方案是使用PDO,但它很麻烦,因为我不能轻易抛出异常。

背景:

Fat Free提供AXON类用于“安全”操作数据库,但我想做一个AXON可以处理的更复杂的查询。

公开了DB类,但是我需要求助于“mysql_real_escape_string()”来构建不保证安全的查询。所以解决方案似乎是使用暴露的PDO。

将公开的PDO作为默认错误处理,这是一种痛苦并导致丑陋的代码。

        $pdo = F3::get('DB')->pdo;
        $sql = 'INSERT INTO config(config_name, config_value, comments) VALUES( :config_name , :config_value , :config_comments)
                     ON DUPLICATE KEY UPDATE config_value= :config_value2';
        if (!$stmt = $pdo->prepare($sql)) {
            $errorInfo = $pdo->errorInfo();
            trigger_error('PDO Error: ' . $pdo->errorCode(). ' ' . $errorInfo[2]);
            exit();
        }

        $stmt->bindValue(':config_name', $field, PDO::PARAM_STR);
        $stmt->bindValue(':config_value', $value, PDO::PARAM_STR);
        $stmt->bindValue(':config_comments', $comments, PDO::PARAM_STR);
        $stmt->bindValue(':config_value2', $value, PDO::PARAM_STR);
        if ($stmt->execute() === false) {
            $errorInfo = $stmt->errorInfo();
            trigger_error('PDO Error: ' . $stmt->errorCode(). ' ' . $errorInfo[2]);
            exit();
        }

那么我还缺少一些更整洁的东西吗?或者AXON可以处理更复杂的查询吗?

1 个答案:

答案 0 :(得分:2)

您是否查看过DB对象并编写参数化查询?您可以view the docs here,并向下切换到参数化查询。

它比直接搞乱PDO更清洁。

DB::sql(
    'SELECT * FROM users WHERE userID=:uID',
    array(':uid'=>array(F3::get('POST.userID'),PDO::PARAM_INT))
);