Я использую библиотеку 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()
для этого значения вызовет какие-либо проблемы? Я мог бы легко изменить библиотеку, но я предполагаю, что есть причина, по которой автор обработал это конкретное регулярное выражение таким образом. Я просто не могу понять, что это за причина! И я не решаюсь вносить какие-либо изменения, пока не пойму причину того, что здесь.
Спасибо за вашу помощь!