PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

jak przechowywać zserializowany obiekt z przestrzenią nazw w bazie danych za pomocą pdo php

Jest tu kilka błędów, ale największą jest to, że nie używasz parametrów zapytania.

Nie użyj addslashes . Jeśli okaże się, że tego używasz, powinieneś pomyśleć „ups, muszę naprawić zapytanie, więc zamiast tego używam parametrów”.

W takim przypadku powinieneś napisać coś takiego:

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

Nie wspomniałeś, jaki jest typ danych argumentu, do którego przekazujesz dane serializowane. Powyższe będzie działać tylko wtedy, gdy jest to text lub varchar lub podobne.

Jeśli to bytea tak jak powinno być w przypadku serializowanych danych obiektowych, musisz poinformować PHP, że parametr jest polem binarnym:

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

Zwróć uwagę na użycie PDO::PARAM_LOB aby stworzyć PDO, które $tmp zawiera dane binarne do przekazania do PostgreSQL jako bytea .

(Możesz umieścić stałe, takie jak 'protect\classes\Router' przy okazji, bezpośrednio w zapytaniach, o ile podzielisz je na parametry, jeśli kiedykolwiek staną się zmiennymi. W większości je rozdzieliłem, ponieważ uważam, że jest to bardziej czytelne w takim zapytaniu.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mieszanie poziomów izolacji w PostgreSQL

  2. Aby zignorować zduplikowane klucze podczas „kopiowania z” w postgresql

  3. PostgreSQL COPY csv wraz z cytatami

  4. Tworzenie tabeli w trybie pojedynczego użytkownika w postgres

  5. ClusterControl — zaawansowane zarządzanie kopiami zapasowymi — PostgreSQL