2

问题:在 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 可以处理更复杂的查询吗?

4

1 回答 1

2

您是否查看过 DB 对象并编写参数化查询?您可以在此处查看文档,并向下选择参数化查询。

它比直接使用 PDO 要干净一些。

DB::sql(
    'SELECT * FROM users WHERE userID=:uID',
    array(':uid'=>array(F3::get('POST.userID'),PDO::PARAM_INT))
);
于 2012-07-12T01:58:52.300 回答