我使用了以下功能:

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();
}


...以更新表的用户名字段(在通过上述函数进行更新之前,请确保其为字符串)。我尝试使用带下划线的字符串进行更新,但是当表中显示该字符串时,下划线就消失了。

我是绑定参数的新手,是否有某些东西可以消除?如果是这样,我想确切地知道什么,以便可以在更新之前使用preg_match捕获它们并警告用户。

最佳答案

您处理数据的方式非常危险。

但是只是为了解决一些可能导致逻辑问题的问题,您应该在所有潜在的表名和列名两侧加上反引号,并使用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";
}

关于php - 绑定(bind)参数会去除下划线吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30360496/

10-15 22:39