2015-05-20 29 views
0

我用了以下功能:绑定参数strip out下划线?

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捕捉它们,然后更新并提醒用户。

+0

*?“的确结合PARAM带了下划线” * - * “我试着更新一个字符串后跟一个下划线,但是当它出现在表格中时,下划线已经消失了。”* - 你问题的标题应该更像*“为什么绑定参数去掉下划线?”* –

+1

绑定doesn'不要改变你提交的数据。如果你以前强调过,他们会在那之后。但是,由于您将“外部”数据直接放入查询字符串中,因此您仍然很容易受到[sql注入攻击](http://bobby-tables.com)的攻击。 –

+0

该功能仅适用于我。在将数据放入函数之前,我会对数据进行清理。所以它不应该删除下划线?任何想法为什么会这样? – thinkofacard

回答

0

您使用数据操作的方式非常危险。

但只是为了解决一些潜在的问题,让你的逻辑,你应该围绕以反引号所有潜在的表和列名,并与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"; 
} 
+0

使用真正的转义字符串的问题是,当我从表中读取时,我需要以某种方式转换它。 有没有办法做到这一点? – thinkofacard

+0

你不需要任何额外的编码 - 它应该按原样工作 – Alex