【发布时间】:2014-01-21 17:41:04
【问题描述】:
根据这个帖子:https://codereview.stackexchange.com/questions/29362/very-simple-php-pdo-class 人们通常说创建自定义 PDO 查询处理程序很愚蠢,我觉得很难理解。
例如,在我的项目中,我更喜欢有一个类/函数来做我一直在做的事情,对我来说更快。
例如,当您需要在表中执行简单的更新时,我创建了这个函数,我一直使用它:
function UpdateData($table, $data, $where, $params=array()) {
$sql = 'UPDATE `' . tbl_prefix.$table . '` SET ';
foreach($data as $name => $value) {
$params[':' . $name] = $value;
$runs++;
$sql .= "`$name` = :" . $name;
if(end($data) !== $value) // if not last run
$sql .= ',';
}
if(!is_array($where)) {
$sql .= ' ' . $where; // insert where clause
} else {
// Array format can be used
$sql .= ' WHERE';
foreach($where as $argument => $value) {
$params[':where_'.$argument] = $value;
$num++;
$sql .= " `" . $argument . "` = :where_" . $argument . " ";
if(end($where) !== $value)
$sql .= ' AND';
}
}
$query = doQuery($sql, $params); // do the update
if($query)
return true;
}
还有doQuery(我在查询数据库时也会用到):
function doQuery($query, $params=array()) {
global $db;
try {
$result = $this->$db->prepare($query);
$result->execute($params);
$result->setFetchMode(PDO::FETCH_ASSOC);
return $result;
} catch(PDOException $ex) {
$real_query = $query;
foreach($params as $name => $value) {
$real_query = str_replace($name, '\''.$value.'\'', $real_query);
}
SystemLog($ex->GetMessage(), array('real_query' => $real_query, 'query' => $query), 1); // log error
}
return false;
}
这有什么问题吗?我觉得它非常有用。
部分代码已从脚本中提取出来以简化代码
【问题讨论】:
-
如果它对你有用,那就去吧。您已经创建了一个在项目中重用的实用程序,因此否定了已接受答案关于可重用性的论点。虽然我明白他在说什么,但他可能指的是创建一个大型抽象类或其他东西,而不仅仅是几个辅助方法。无论哪种方式,您的项目都应该满足您的需求。如果您对这些东西有足够的了解,甚至制作了上述 2 个助手,那么您可能可以安全地使用它们。