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