ここにはいくつか問題がありますが、最大の問題は、クエリパラメータを使用していないことです。
しないでください addslashes
を使用する 。それを使用していることに気付いた場合は、「おっと、クエリを修正する必要があるので、代わりにパラメータを使用する」と考える必要があります。
この場合、次のように書く必要があります:
$sth = $pdo->prepare('SELECT replace_value(?, ?, ?)');
$sth->execute(array('protect\classes\Router', $tmp, 'serialized_classes'));
シリアル化されたデータを渡す引数のデータ型については言及していません。上記は、text
の場合にのみ機能します またはvarchar
または同様のもの。
bytea
の場合 シリアル化されたオブジェクトデータの場合と同様に、パラメータがバイナリフィールドであることをPHPに通知する必要があります。
$sth = $pdo->prepare('SELECT replace_value(:router, :serialbytes, :mode)');
$sth->bindParam(':router', 'protect\classes\Router');
$sth->bindParam(':mode', 'serialized_classes');
$sth->bindParam(':serialbytes', $tmp, PDO::PARAM_LOB);
$sth->execute();
PDO::PARAM_LOB
の使用に注意してください $tmp
のPDOを解決する bytea
としてPostgreSQLに渡されるバイナリデータが含まれています 。
('protect\classes\Router'
のような定数を入れても問題ありません クエリに直接、ところで、変数になった場合にパラメータに分割する限り。このようなクエリで読みやすくなるため、ほとんどを分離しました。)