PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

как да съхранявате сериализиран обект с пространство от имена в база данни с помощта на pdo php

Тук има няколко нередни неща, но най-голямата е, че не използвате параметри на заявката.

Недей използвайте 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 за да укажете PDO, че $tmp съдържа двоични данни, които да бъдат предадени на PostgreSQL като bytea .

(Добре е да поставите константи като 'protect\classes\Router' директно във вашите заявки, между другото, стига да ги разделите на параметри, ако някога станат променливи. Най-често ги разделих, защото го намирам за по-разбираемо в заявка като тази.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изчисляване на проценти със заявка GROUP BY

  2. Postgresql join_collapse_limit и време за планиране на заявката

  3. Lazarus Free Pascal / Delphi - RunError 211

  4. Postgres now() Timestamp не се променя, когато скриптът работи

  5. Как мога ръчно да вмъкна .png или .jpeg файл в колона bytea в PostgreSQL?