首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定参数会去掉下划线吗?

绑定参数会去掉下划线吗?
EN

Stack Overflow用户
提问于 2015-05-21 05:14:51
回答 1查看 51关注 0票数 0

我使用了以下函数:

代码语言:javascript
复制
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在更新之前捕获它们,并提醒用户。

EN

回答 1

Stack Overflow用户

发布于 2015-05-21 08:04:34

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

但是,为了修复一些潜在的问题,保持您的逻辑,您应该用反引号将所有可能的表名和列名括起来,并使用mysqli_real_escape_string()准备值

代码语言:javascript
复制
$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";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30360496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档