sql >> Databáze >  >> RDS >> PostgreSQL

jak uložit serializovaný objekt s jmenným prostorem v databázi pomocí pdo php

Je zde několik věcí špatně, ale největší je, že nepoužíváte parametry dotazu.

Ne použijte addslashes . Pokud zjistíte, že to používáte, měli byste si myslet:„Jejda, musím opravit dotaz, takže místo toho použiji parametry“.

V tomto případě byste měli napsat něco jako:

$sth = $pdo->prepare('SELECT replace_value(?, ?, ?)');
$sth->execute(array('protect\classes\Router', $tmp, 'serialized_classes'));

Nezmínili jste se, jaký je datový typ argumentu, kterému předáváte serializovaná data. Výše uvedené bude fungovat pouze v případě, že se jedná o text nebo varchar nebo podobně.

Pokud je to bytea jako by to mělo být pro serializovaná objektová data, musíte PHP říci, že parametr je binární pole:

$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();

Všimněte si použití PDO::PARAM_LOB sdělit PDO, že $tmp obsahuje binární data, která mají být předána PostgreSQL jako bytea .

(Je dobré vkládat konstanty jako 'protect\classes\Router' přímo do vašich dotazů, mimo jiné, pokud je rozdělíte na parametry, pokud se někdy stanou proměnnými. Většinou jsem je oddělil, protože mi to připadá čitelnější v dotazu, jako je tento.)



  1. Současné připojení k SQL Server, Oracle, DB2 a MySQL pomocí ADO.NET?

  2. MySQL/Hibernate:Výchozí hodnota pro sloupec není null nefunguje

  3. Automaticky zabíjet dlouho běžící dotazy (MySql), Apache Tomcat DataSource

  4. Data Mysql do stylizované tabulky HTML