在PHP中远程镜像文件到sqlite blob?

k97glaaz  于 2023-05-23  发布在  SQLite
关注(0)|答案(2)|浏览(147)

我有一个图像文件存储在远程服务器上。我只能通过HTTP访问服务器,所以我使用file_get_contents(URL)获取其内容
我需要将此内容存储在本地sqlite3数据库中类型为'blob'的字段中。我使用PDO对象连接到数据库,并使用

$db->exec("INSERT INTO myTable (myImageBlob) VALUES
           ('".file_get_contents($filePath)."')")

将数据添加到数据库。
这样不行如果我犯了一个愚蠢的错误,我向你道歉。我们都得学会...
由于我不会深入研究的原因,我不可能在本地存储图像并将URL放入数据库中。它/必须/要存储在blob中。

0s7z1bwu

0s7z1bwu1#

在SQL语句中串联您无法控制的数据是一个非常糟糕的主意。例如,图像数据可以包含将终止字符串的引号或将被解释为控制字符的反斜杠。最糟糕的是,有人可能会构建一个虚假的图像,在您的应用程序中注入恶意的SQL代码。
我建议你用一个事先准备好的声明来代替:

$query = $db->prepare("INSERT INTO myTable (myImageBlob) VALUES (?)");
$query->bindParam(1, fopen($filePath, "rb"), PDO::PARAM_LOB);
$query->execute();

请注意,通过将PDO::PARAM_LOB传递给bindParam(),可以从流中插入blob的数据。这就是为什么我使用fopen()而不是file_get_contents()

qxgroojn

qxgroojn2#

别这么做每当你把二进制数据插入数据库时,上帝就杀死了一只小猫。
相反,将该映像存储在文件系统中的某个位置,并将 path 保存在数据库中。
记住要为小猫着想!

相关问题