dataHandlerライブラリを使用して、すべてのdb挿入/更新などを処理しています。ライブラリには次の関数があります。
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()
この値を呼び出すと問題が発生しますか?ライブラリは簡単に変更できますが、作成者がこの特定の正規表現をこのように処理したのには理由があると思います。その理由がわからない!そして、ここにあるものの背後にある理由を理解するまで、私は変更を加えることを躊躇します。
ご協力いただきありがとうございます!