で使用されていないmysql_real_escape_stringの私は、など、私のデシベルの挿入/更新のすべてを処理するために ライブラリの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()
と呼ぶと何か問題はありますか?私は簡単にライブラリを変更することができますが、私は、この特定の正規表現をこの方法で処理した理由があると仮定しています。私はその理由が分かりません!そして私は、ここにあるものの背後にある理由を理解するまで、変更を加えることを躊躇しています。
ありがとうございました!
')'で終わる値に 'mysql_real_escape_string()'を呼び出さない理由はわかりません。このライブラリは何ですか?おそらく著者は、珍しいパーソナルユースケースしか考えていなかったでしょう。 –
@Michael健全性検査をありがとう。私が知る限り、これは著者がデータベースのやりとりのために持っていた単なる汎用ライブラリであり、特別な使用事例のために設計されたものではありません。 – user480029