一尘不染

PHP:使用PDO从MySQL检索图像

mysql

我正在重构一些旧代码,包括重写基本的mysql查询以使用PDO。

以下内容在所有浏览器和所有图像类型中均能出色发挥作用:

$query = 'SELECT image FROM image WHERE imageid=' . $image_id;
$result = mysql_query($query, $db_conn); querycheck($result);
header("Content-type: image");
echo mysql_result($result, 0);

不幸的是,但是我使用PDO重写了它,但是它不起作用。我已经遍历了整个PDO文档和标准的Web搜索,但是所有建议/解决方案都无效。

如何使用PDO轻松地从MySQL中获取图像并显示图像?

编辑1:

马修·拉兹洛夫(Matthew Ratzloff)在下面给出了明显的答案,但这没有用。这是我使用PDO测试的实际代码(并且我已经尝试了许多变体/参数):

$connectstring_temp = 'mysql:host=' . $A . ';dbname=' .$B;
$dbh_temp = new PDO($connectstring_temp, $login, $password);
#$dbh_temp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
#$dbh_temp->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);

$sql = "SELECT image FROM image WHERE imageid=" . $image_id;
$query = $dbh_temp->prepare($sql);
$query->execute();

$query->bindColumn(1, $image, PDO::PARAM_LOB);
$query->fetch(PDO::FETCH_BOUND);
header("Content-Type: image");
echo $image;

我保留了相同的语法,尽管对于最终代码$ image_id需要作为参数传递。上面的代码不起作用。PDO适用于所有其他所有类型的查询。


阅读 207

收藏
2020-05-17

共1个答案

一尘不染

您需要对imageid值进行参数化并将参数绑定到PDO::PARAM_LOB

$sql = "SELECT image FROM image WHERE imageid=:id";
$query = $db_conn->prepare($sql);
$query->execute(array(':id' => $image_id));

$query->bindColumn(1, $image, PDO::PARAM_LOB);
$query->fetch(PDO::FETCH_BOUND);
header("Content-Type: image");
echo $image;

当然,您还需要指定完整,正确的内容类型(例如image / png)。

2020-05-17