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