Mẹo về Hướng dẫn dùng postgres bytea trong PHP 2022
Pro đang tìm kiếm từ khóa Hướng dẫn dùng postgres bytea trong PHP được Update vào lúc : 2022-09-15 14:00:22 . Với phương châm chia sẻ Bí kíp Hướng dẫn trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi Read tài liệu vẫn ko hiểu thì hoàn toàn có thể lại phản hồi ở cuối bài để Admin lý giải và hướng dẫn lại nha.
TL; DR:
Xóa addslashes($data). Nó thừa ở đây.
Nội dung chính
- Thoát kép .. hai lần
- Thay vào đó bạn nên làm gì
- Bây giờ, đến hộp xà phòng của tôi
Thoát kép .. hai lần
$data=fread($p.,filesize($fi));
$data=addslashes($data);
$dat= pg_escape_bytea($data);
Bạn đọc tài liệu trong, thoát nó như thể nó là một chuỗi ký tự, tiếp theo đó quy đổi nó thành bytea octal hoặc hex Escape. Nó không bao giờ hoàn toàn có thể hoạt động và sinh hoạt giải trí Theo phong cách đó trong cả những lúc pg_escape_byteađã lành mạnh, mà nó không phải là.
PHP’s pg_escape_byteadường như thoát kép đầu ra để nó hoàn toàn có thể được chèn vào một trong những chuỗi ký tự. Điều này cực kỳ xấu xí, nhưng dường như không còn giải pháp thay thế
nào không thực thi thoát kép này, vì vậy bạn dường như không thể sử dụng những câu lệnh được tham số hóa cho bytea trong PHP. Bạn vẫn nên làm như vậy cho mọi thứ khác.
Trong trường hợp này, chỉ việc xóa addslashesdòng cho tài liệu được đọc trong tệp là đủ.
Trường hợp thử nghiệm đã cho toàn bộ chúng ta biết rằng pg_escape_byteacác thoát kép (và luôn sử dụng những thoát bát phân cũ, không hiệu suất cao):
<?php
# oh-the-horror.php
print pg_escape_bytea(“Blah binaryx00x01x02x03x04 blah”);
?>
Chạy:
php oh-the-horror.php
Kết quả:
Blah binary\000\001\002\003\004 blah
Xem những dấu gạch chéo ngược kép? Đó là chính bới giả sử bạn sẽ nội suy
nó vào SQL dưới dạng một chuỗi, điều này cực kỳ kém hiệu suất cao về bộ nhớ, xấu xí và là một thói quen rất xấu. Tuy nhiên, bạn dường như không sở hữu và nhận được bất kỳ sự thay thế nào.
Trong số những điều khác, điều này nghĩa là:
pg_unescape_bytea(pg_escape_bytea(“x01x02x03”));
… tạo ra kết quả sai , vì pg_unescape_byteathực sự không phải là hòn đảo ngược của pg_escape_bytea. Nó cũng làm cho nó không thể phục vụ đầu ra của pg_escape_byteathành pg_query_paramsnhư một tham số, bạn phải nội suy nó trong.
Giải mã
Nếu bạn đang sử dụng PostgreSQL
tân tiến, nó hoàn toàn có thể được đặt bytea_outputthành hexmặc định. Điều đó nghĩa là nếu tôi ghi tài liệu của tớ vào một trong những byteatrường tiếp theo đó tìm nạp nó trở lại, nó sẽ trông in như sau:
craig=> CREATE TABLE byteademo(x bytea);
CREATE TABLE
craig=> INSERT INTO byteademo(x) VALUES (‘Blah binary\000\001\002\003\004 blah’);
INSERT 0 1
craig=> SELECT * FROM byteademo ;
x
—————————————————————————-
x426c61682062696e6172795c3030305c3030315c3030325c3030335c30303420626c6168
(1 row)
“Ừm, cái gì”, bạn hoàn toàn có thể nói rằng? Nó ổn, nó chỉ là màn biểu diễn hex nhỏ gọn hơn một chút ít của PostgreSQL bytea. pg_unescape_byteasẽ xử lý nó tốt và tạo ra những byte thô in như đầu ra … nếu bạn có PHP tân tiến và libpq. Trên những phiên bản cũ hơn, bạn sẽ nhận được rác và cần đặt bytea_outputthành escapefor
pg_unescape_byteađể xử lý.
Thay vào đó bạn nên làm gì
Sử dụng PDO.
Nó có tương hỗ lành mạnh (ish) cho bytea.
$sth = $pdo->prepare(‘INSERT INTO mytable(somecol, byteacol) VALUES (:somecol, :byteacol)’);
$sth->bindParam(‘:somecol’, ‘bork bork bork’);
$sth->bindParam(‘:byteacol’, $thebytes, PDO::PARAM_LOB);
$sth->execute();
Xem:
- PHP: Đối tượng lớn , có ví dụ về đúng chuẩn những gì bạn muốn;
- PDOStatement :: bindParam
- cách tàng trữ đối tượng người dùng tuần tự hóa với không khí tên trong cơ sở tài liệu bằng pdo php
- Ràng buộc BYTEA với Tuyên bố sẵn sàng sẵn sàng sẵn PGSQL PDO bằng PHP5
Bạn cũng hoàn toàn có thể muốn xem xét tương hỗ lob (đối tượng người dùng lớn) của PostgreSQL, phục vụ giao diện trực tuyến, hoàn toàn có thể tìm kiếm mà vẫn hoàn toàn
hoàn toàn có thể thanh toán giao dịch thanh toán.
Bây giờ, đến hộp xà phòng của tôi
Nếu PHP có sự phân biệt thực sự giữa nhiều chủng loại “chuỗi byte” và “chuỗi văn bản”, bạn thậm chí còn sẽ không còn cần pg_escape_byteavì trình điều khiển và tinh chỉnh cơ sở tài liệu hoàn toàn có thể làm điều này cho bạn. Không có sự xấu xí nào được yêu cầu. Thật rủi ro không mong muốn, không còn kiểu chuỗi và byte riêng không liên quan gì đến nhau trong PHP.
Vui lòng sử dụng PDO với những câu lệnh được tham số hóa càng nhiều càng tốt.
Trường hợp bạn không thể, tối thiểu hãy sử dụng pg_query_paramsvà
những câu lệnh được tham số hóa. PHP addslasheskhông phải là một giải pháp thay thế, nó không hiệu suất cao, xấu xí và không hiểu những quy tắc thoát dành riêng cho cơ sở tài liệu. Bạn vẫn phải thoát Theo phong cách thủ công byteanếu bạn không sử dụng PDO vì nguyên do lịch sử trở ngại vất vả, nhưng mọi thứ khác phải thông qua những câu lệnh được tham số hóa.
Để được hướng dẫn về pg_query_params:
- Bảng Bobby , phần PHP.
- Hướng dẫn sử dụng PHP trên pg_query_params
15 hữu ích 2 phản hồi
chia sẻ
Tải thêm tài liệu liên quan đến nội dung bài viết Hướng dẫn dùng postgres bytea trong PHP
programming
php
Mysqli_real_escape_string
Mysql_real_escape_string trong PHP
PostgreSQL bytea example
Reply
6
0
Chia sẻ
Chia Sẻ Link Down Hướng dẫn dùng postgres bytea trong PHP miễn phí
Bạn vừa đọc tài liệu Với Một số hướng dẫn một cách rõ ràng hơn về Video Hướng dẫn dùng postgres bytea trong PHP tiên tiến và phát triển nhất và ShareLink Tải Hướng dẫn dùng postgres bytea trong PHP Free.
Thảo Luận vướng mắc về Hướng dẫn dùng postgres bytea trong PHP
Nếu sau khi đọc nội dung bài viết Hướng dẫn dùng postgres bytea trong PHP vẫn chưa hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Mình lý giải và hướng dẫn lại nha
#Hướng #dẫn #dùng #postgres #bytea #trong #PHP