sql >> Databasteknik >  >> RDS >> PostgreSQL

hur man lagrar serialiserade objekt med namnutrymme i databasen med hjälp av pdo php

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.)



  1. Hur kör man ett MySQL-kommando från ett skalskript?

  2. Uppdatering av datum och tid till MySQL via python

  3. Lätt WordPress-installation:Hur man installerar WordPress med SQLite

  4. Hur man återställer MySQL root-lösenord