使用 PDO 问题从 MySQL 检索图像

Posted

技术标签:

【中文标题】使用 PDO 问题从 MySQL 检索图像【英文标题】:Retrieve image from MySQL using PDO problems 【发布时间】:2015-03-09 09:55:22 【问题描述】:

我已将其字段中包含图像的 access 数据库迁移到 mysql

当我尝试使用几个 php 代码将它们可视化时,我得到一个损坏的图像图标,或者我下载了我尝试在新尝试中使用的 php 代码 (PHP: Retrieve image from MySQL using PDO):

<?php
$con = mysqli_connect('localhost', 'root', '', 'access');
$query = mysqli_query($con,"SELECT EscudoClub FROM tclubs WHERE CodClub =    'C13'");
$imageData = mysqli_fetch_array($query, MYSQLI_ASSOC);
$image = $imageData['EscudoClub'];
header("Content-type: image/jpeg");
echo $image;
mysqli_free_result($query);
mysqli_close($con);

?>

使用上面的代码,我得到一个损坏的图像图标,使用 pdo 我只能下载 php 代码,我猜是因为一些语法问题:

//$dbName = $_SERVER["DOCUMENT_ROOT"]."\\..\db\\teknofo.mdb";
//$con = new PDO("odbc:DRIVER=Microsoft Access Driver (*.mdb); DBQ=access;   Uid=; Pwd=;");
$con = new PDO('mysql:host=localhost;dbname=access;charset=utf8', 'root', '');
$sql = "SELECT EscudoClub FROM tclubs WHERE CodClub = 'C13'";
$st = $con->prepare($sql);
$st->execute(array(17));
$st->bindColumn('photo', $photo, PDO::PARAM_LOB);
$st->fetch(PDO::FETCH_BOUND);
odbc_longreadlen($st, 131072);        
odbc_binmode($st,ODBC_BINMODE_CONVERT);                            
ob_clean();
header('Content-Type: image/*');
if ($rd = $st->fetch(PDO::FETCH_BOUND)) 

echo $rd['photo'];
ob_end_flush();
$con = null;

?>

拜托,你能帮帮我吗?

亲切的问候

【问题讨论】:

sql 变量应该存储图像。我在原始帖子中读到代码可用于在***.com/questions/22325904/… 此处显示图像。如何更改上述 2 个代码之一以正确显示存储在 sql 变量中的图像? 【参考方案1】:

在执行语句时,您提供了一个显式参数值(17)——但该语句不包含任何参数占位符!然后,您尝试绑定一个名为'photo' 的列,该列在结果集中不存在。 odbc_* 电话也不应该在那里。

$con = new PDO('mysql:host=localhost;dbname=access;charset=utf8', 'root', '');
     // DON'T USE ROOT USER !!!

$st = $con->prepare('SELECT EscudoClub FROM tclubs WHERE CodClub = ?');
$st->execute(array('C13'));
if ($rd = $st->fetch())

  header('Content-Type: image/*'); // you should give an exact MIME type
  echo $rd['EscudoClub'];

【讨论】:

嗨。我使用了你的代码,但我一直显示一个小图标(通用缩略图)。根用户仅用于测试目的。我正在使用 xampp。当我使用所有访问表单和查询完成所有迁移时,我将保护 mysql :)。【参考方案2】:

您应该首先从以下位置映射 $sql 调用:

$sql = "SELECT EscudoClub FROM tclubs WHERE CodClub = 'C13'";

收件人:

"SELECT EscudoClub FROM tclubs WHERE CodClub = ':cod_club'";
$st = $con->prepare($sql);
$st->execute(array('cod_club' => 123456));

我不知道这是否可以解决您的问题,但是当您从调用中直接获取 PHP 源代码时,通常是由于您的服务器配置(apache、nginx 等)所致。

【讨论】:

我尝试了你的代码,但我在网页上没有得到任何东西 你的网络服务器是什么?你能给我们你的配置文件吗? 嗨。我正在使用 xampp:Apache (2.4.10) 和 mysql (5.6)。我不确定这是否可能是数据类型迁移问题,因为在访问数据库中,这些图像位于 microsoft word picture.format 上,现在我将这些图像作为 mysql 上的 blob。我已经测试了几个 php,最后我只得到一个小图标。我正在考虑导出这些图像并在数据库上使用 uri 引用,但问题是我有一个 1.3GB 表 嗯,刚刚看到源码有个小错误:尝试去掉select查询中的引号,和':cod_club'绑定(用':')。顺便说一句,你有没有成功展示一些其他的 php 页面?【参考方案3】:

我想补充一点,access数据库上的图片存储为microsoft word图片。我不知道在尝试显示它们之前是否应该将它们导出为任何图像格式(jpeg、png ..)。问题是我从 access 数据库中迁移了所有数据,并且有一个包含 1.3GB 照片的表。

亲切的问候。

【讨论】:

以上是关于使用 PDO 问题从 MySQL 检索图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从 MYSQL 中插入和检索图像 blob?

android 从 MySql 数据库中检索 blob 图像

Android:无法从mysql数据库中检索图像URL并将其显示在imageView中

从 mysql 数据库中检索为 blob 图像时图像损坏

使用 JDBC 从 MySQL 获取图像

从mysql中检索图像并设置为pictureBox C#