我有一个图像文件存储在远程服务器上。我只能通过 HTTP 访问服务器,因此我使用 file_get_contents(URL) 获取其内容
我需要将此内容存储在本地 sqlite3 数据库中的“blob”类型字段中。我正在使用 PDO 对象连接到数据库,并且我正在使用
$db->exec("INSERT INTO myTable (myImageBlob) VALUES
('".file_get_contents($filePath)."')")
Run Code Online (Sandbox Code Playgroud)
将数据添加到数据库。
这不起作用。如果我犯了一个非常低级的错误,我很抱歉。我们都必须以某种方式学习...
由于我不会深入研究的原因,我不可能在本地存储图像并将 URL 放入数据库中。它/必须/存储在 blob 中。
在 SQL 语句中连接您无法控制的数据是一个非常糟糕的主意。例如,图像数据可能包含将终止字符串的引号或将被解释为控制字符的反斜杠。最糟糕的是,有人可能会构建一个假镜像来在您的应用程序中注入恶意 SQL 代码。
我建议您改用准备好的语句:
$query = $db->prepare("INSERT INTO myTable (myImageBlob) VALUES (?)");
$query->bindParam(1, fopen($filePath, "rb"), PDO::PARAM_LOB);
$query->execute();
Run Code Online (Sandbox Code Playgroud)
请注意,通过将 PDO::PARAM_LOB 传递给 bindParam(),您可以从流中插入 blob 的数据。这就是为什么我使用 fopen() 而不是 file_get_contents()