Det är flera saker som är fel här, men den största är att du inte använder frågeparametrar.
Gör inte använd addslashes
. Om du märker att du använder det bör du tänka "oj, jag måste fixa frågan så jag använder parametrar istället".
I det här fallet bör du skriva något i stil med:
$sth = $pdo->prepare('SELECT replace_value(?, ?, ?)');
$sth->execute(array('protect\classes\Router', $tmp, 'serialized_classes'));
Du har inte nämnt vilken datatyp för argumentet du skickar den serialiserade informationen till. Ovanstående fungerar bara om det är text
eller varchar
eller liknande.
Om det är bytea
som det borde vara för serialiserade objektdata, måste du tala om för PHP att parametern är ett binärt fält:
$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();
Observera användningen av PDO::PARAM_LOB
att tell PDO att $tmp
innehåller binär data som ska skickas till PostgreSQL som bytea
.
(Det går bra att sätta konstanter som 'protect\classes\Router'
direkt in i dina frågor, btw, så länge du delar upp dem i params om de någonsin blir variabler. Jag separerade dem mest eftersom jag tycker att det är mer läsbart i en fråga som denna.)