我已经创建了一个查询数据库的函数。这个函数接受一个数组,即我想要更新的用户的id 和查询操作。
如果查询操作是UPDATE
如果你看下面的代码,这是一个很好的编码实践还是这个错误的代码?
public function query($column, $search_value, $query_operation = "SELECT"){
if(strtoupper($query_operation == "UPDATE")){
$query = "UPDATE users SET ";
if(is_array($column)){
$counter = 1;
foreach($column as $key => $value){
if($counter < count($column)){
$query .= $key . ' = ?, ';
}else{
$query .= $key . ' = ? ';
}
$counter++;
}
$query .= "WHERE id = ?";
$stmt = $this->database->prepare($query);
$counter = 1;
foreach($column as $key => &$value){
$stmt->bindParam($counter, $value);
$counter++;
}
$stmt->bindParam($counter, $search_value);
if($stmt->execute()){
$stmt = $this->database->prepare("SELECT* FROM
users WHERE id = ?");
$stmt->bindParam(1, $search_value, PDO::PARAM_INT);
$stmt->execute();
return $this->build_array($stmt);
}
}
}
}
很想听到一些反馈。
答案 0 :(得分:1)
我会不在同一个函数中混合 SELECT 和 UPDATE 。
以下更新函数使用数组作为列名称和值$columnNames
&amp; $values
使用未命名的参数。
function update($tableName,$columnNames,$values,$fieldName,$fieldValue){
$sql = "UPDATE `$tableName` SET ";
foreach($columnNames as $field){
$sql .= $field ." = ?,";
}
$sql = substr($sql, 0, -1);//remove trailing ,
$sql .= " WHERE `$fieldName` = ?";
return $sql;
}
由于表格和列名称不能作为PDO中的参数传递,我已经演示了表名称的白名单。
$tables = array("client", "Table1", "Table2");// Array of allowed table names.
同样array_push()
将最后一个参数(WHERE)的值添加到$ values数组
使用
if (in_array($tableName, $tables)) {
$sql = update($tableName,$columnNames,$values,$fieldName,$fieldValue);
array_push($values,$fieldValue);
$STH = $DBH->prepare($sql);
$STH->execute($values);
}
您可以对 SELECT
使用类似的技巧