使用 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 图像