PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

cách lưu trữ đối tượng tuần tự hóa với không gian tên trong cơ sở dữ liệu bằng pdo php

Có một số điều sai ở đây, nhưng điều lớn nhất là bạn không sử dụng các tham số truy vấn.

Đừng sử dụng addslashes . Nếu bạn thấy mình đang sử dụng nó, bạn nên nghĩ "rất tiếc, tôi cần phải sửa truy vấn nên tôi sử dụng các tham số để thay thế".

Trong trường hợp này, bạn nên viết một cái gì đó như:

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

Bạn chưa đề cập đến kiểu dữ liệu của đối số mà bạn truyền dữ liệu được tuần tự hóa đến là gì. Ở trên sẽ chỉ hoạt động nếu nó là text hoặc varchar hoặc tương tự.

Nếu đó là bytea giống như đối với dữ liệu đối tượng được tuần tự hóa, bạn phải nói với PHP rằng tham số là một trường nhị phân:

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

Lưu ý việc sử dụng PDO::PARAM_LOB để tlel PDO rằng $tmp chứa dữ liệu nhị phân được chuyển tới PostgreSQL dưới dạng bytea .

(Bạn có thể đặt các hằng số như 'protect\classes\Router' trực tiếp vào các truy vấn của bạn, btw, miễn là bạn chia chúng thành các tham số nếu chúng trở thành biến. Tôi chủ yếu tách chúng ra vì tôi thấy nó dễ đọc hơn trong một truy vấn như thế này.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lọc ra các bản ghi tiếp theo trùng lặp trong một CHỌN

  2. Sự cố khi sắp xếp các ký tự có dấu trong PostgreSQL 8.4

  3. LỖI:không thể mở rộng tệp pg_tblspc / 4815857 / PG_11_201809051 / 16321:Không còn dung lượng trên thiết bị

  4. psql vai trò gây tử vong không tồn tại

  5. LỖI:hàm dblink (không xác định, không xác định) không tồn tại