我正在使用 dataHandler 库来处理我所有的数据库插入/更新等。该库具有以下功能:
function prepareValue($value, $connection){
$preparedValue = $value;
if(is_null($value)){
$preparedValue = 'NULL';
}
else{
$preparedValue = '\''.mysql_real_escape_string($value, $connection).'\'';
}
return $preparedValue;
}
function parseParams($params, $type, $connection){
$fields = "";
$values = "";
if ($type == "UPDATE"){
$return = "";
foreach ($params as $key => $value){
if ($return == ""){
if (preg_match("/\)$/", $value)){
$return = $key."=".$value;
}
else{
$return = $key."=".$this->prepareValue($value, $connection);
}
}
else{
if (preg_match("/\)$/", $value)){
$return = $return.", ".$key."=".$value;
}
else{
$return = $return.", ".$key."=".$this->prepareValue($value,
$connection);
}
}
}
return $return;
/* rest of function contains similar but for "INSERT", etc.
}
这些函数然后用于使用 sprintf 构建查询,如下所示:
$query = sprintf("UPDATE table SET " .
$this->parseParams($params, "UPDATE", $conn) .
" WHERE fieldValue = %s;", $this->prepareValue($thesis_id, $conn));
$params
是一个关联数组: array("db_field_name"=>$value, "db_field_name2"=>$value2, etc.)
当我想要更新或插入以“)”结尾的字符串时,我现在遇到了问题,因为 parseParams 函数没有将这些值放在引号中。
我的问题是:为什么这个库不会在以右括号结尾的字符串上调用 prepareValue?调用mysql_real_escape_string()
这个值会导致任何问题吗?我可以轻松地修改库,但我假设作者以这种方式处理这个特定的正则表达式是有原因的。我就是想不通这是什么原因!在我理解这里的原因之前,我很犹豫是否要进行任何修改。
谢谢你的帮助!