Ci sono molte cose che non vanno qui, ma la più grande è che non stai utilizzando i parametri di query.
Non usa addslashes
. Se ti ritrovi a usarlo, dovresti pensare "oops, devo correggere la query, quindi uso invece i parametri".
In questo caso, dovresti scrivere qualcosa come:
$sth = $pdo->prepare('SELECT replace_value(?, ?, ?)');
$sth->execute(array('protect\classes\Router', $tmp, 'serialized_classes'));
Non hai menzionato il tipo di dati dell'argomento a cui passi i dati serializzati. Quanto sopra funzionerà solo se è text
o varchar
o simili.
Se è bytea
come dovrebbe essere per i dati degli oggetti serializzati, devi dire a PHP che il parametro è un campo binario:
$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();
Nota l'uso di PDO::PARAM_LOB
per dire a PDO quel $tmp
contiene dati binari da passare a PostgreSQL come bytea
.
(Va bene inserire costanti come 'protect\classes\Router'
direttamente nelle tue query, a patto che tu le divida in parametri se mai diventano variabili. Per lo più li ho separati perché lo trovo più leggibile in una query come questa.)