【发布时间】:2014-09-27 09:52:32
【问题描述】:
我一直将 zip 文件的内容存储在 MySQL 数据库中的 LONGBLOB 中,但我正在转向 Postgres。根据我的阅读,Postgres 中的 LONGBLOB 是 bytea。不幸的是,我无法将 zip 内容写入数据库。首先,我得到了这个错误:
Warning: pg_query(): Query failed: ERROR: invalid byte sequence for encoding "UTF8"
0x5c
然后我用 SQL_ASCII 编码创建了一个新的数据库(以前是 UTF8),得到了这个错误:
PHP Warning: pg_query(): Query failed: ERROR: syntax error at or near "v╘▓ú5"
LINE 2: ...√╢V[úB√▬┌»å⌐²└ù╙±b±≡ß▼┐π}°ï»┌G╜₧╧εo»~°0o╞W/_╝ƒL¢\'v╘▓ú5;Ω░#╩...
有什么方法可以在 Postgres 中创建数据库/表/列而不进行编码?如果没有,我应该如何存储这些信息?我尝试使用 pg_escape_bytea 但是当我尝试解压缩内容时会产生错误。不确定这真的很重要,但这是我用来写入数据库的 PHP:
$content = file_get_contents($zipLocation);
$content = addslashes($content);
$sql="INSERT INTO ZIP_TBL ( BUILD, CONTENT)
VALUES ('$build', '$content')";
if (!pg_query($con,$sql)) {
die('Error: ' . pg_last_error($con));
}
【问题讨论】:
-
你不能使用绑定参数让PostgreSQL驱动处理正确编码二进制数据吗?
-
永远,永远,永远使用
addslashes。如果你正在使用它,那是一个巨大的闪烁警告,上面写着“这里可能存在安全漏洞”。在这种情况下,您应该清楚地使用参数化查询。
标签: php mysql sql postgresql encoding