我使用了以下函数:
function update_value($table, $field, $value, $type, $where1, $value1, $where2=NULL, $value2=NULL, $where3=NULL, $value3=NULL) {
$rows = array();
global $conn;
connect();
$value1 = "'" . $value1 . "'";
$sql = "UPDATE $table SET $field =? WHERE $where1 = $value1";
$bind1 = "'" . "$type" . "'";
if ($where2 != NULL) {
$value2 = "'" . $value2 . "'";
$sql .= " AND $where2 = $value2";
}
if ($where3 != NULL) {
$value3 = "'" . $value3 . "'";
$sql .= " AND $where3 = $value3";
}
$stmt = $conn->prepare($sql);
$stmt->bind_param($type, $value);
$stmt->execute();
$stmt->close();
$conn->close();
}...to更新表的用户名字段(在通过上面的函数更新之前,确保它是一个字符串)。我尝试使用字符串后跟下划线进行更新,但是当它出现在表中时,下划线已经消失了。
我对绑定参数是个新手,它有没有把某些东西去掉呢?如果是这样的话,我想知道具体是什么,这样我就可以使用preg_match在更新之前捕获它们,并提醒用户。
发布于 2015-05-21 08:04:34
你处理数据的方式是非常危险的。
但是,为了修复一些潜在的问题,保持您的逻辑,您应该用反引号将所有可能的表名和列名括起来,并使用mysqli_real_escape_string()准备值
$val1 = "'" . mysqli_real_escape_string($value1) . "'";
$sql = "UPDATE `$table` SET `$field` = ? WHERE `$where1` = $val1";
if (!empty($where2)) {
$value2 = "'" . mysqli_real_escape_string($value2) . "'";
$sql .= " AND `$where2` = $value2";
}
if (!empty($where3)) {
$value3 = "'" . mysqli_real_escape_string($value3) . "'";
$sql .= " AND `$where3` = $value3";
}https://stackoverflow.com/questions/30360496
复制相似问题