我正在重构一些旧代码,包括重写基本的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适用于所有类型的所有其他查询。
答案 0 :(得分:3)
您需要参数化图像ID值并将参数绑定到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)。
答案 1 :(得分:0)
您可以使用此代码使用PDO从数据库获取图像:
public function getImage($id){
$sql = "SELECT * FROM images WHERE id = ?";
$sth = $this->dbh->prepare($sql);
$sth->bindParam(1,$id);
$sth->execute();
$num = $sth->rowCount();
if( $num ){
$row = $sth->fetch(PDO::FETCH_ASSOC);
header("Content-type: ".$row['type']);
print $row['image'];
exit;
}else{
return null;
}
}
type - data type(column name)
,例如image / png或image / gif
image - image data(column name)
作为LOB存储在表中
$this->dbh
连接处理程序
它适用于我,但现在我需要找出如何使用JS,因为这个函数的结果传递给JavaScript代码 - 所谓的ajax
答案 2 :(得分:0)
我对Image Blobs的个人方法是使用php文件来提供图像,结合GET参数......它100%有效且不涉及文件创建...例如,要服务的文件来自blob的图像将是:
image.php:
<?php
$db = new PDO('mysql:host=localhost;dbname=anything; charset=utf8', 'account','password');
if (isset($_GET['imageid'])) {
$result = $db->prepare("SELECT image FROM image where imageid = ?");
if ($result->execute(array($_GET['imageid']))) {
$row=$result->fetch();
echo $row['pic']; //this prints the image data, transforming the image.php to an image
}
} // you can put an "else" here to do something on error...
?>
这可以从您的主脚本调用...例如:
<?php
$db = new PDO('mysql:host=localhost;dbname=anything; charset=utf8', 'account','password');
//... some code to do your job, where you get your imageid from
$imageid=...
?>
<img src="./image.php?imageid=<?php echo $imageid;?>">
答案 3 :(得分:-2)
此代码显示数据库中的所有图像,以便您可以更改它并使其按照您的意愿执行
getMessage(); }?&gt;<?php
#the folder where the images are saved
$target = "image_uploads/";
$image_name = (isset($_POST['image_name']));
$query = ("SELECT user_id ,image_name FROM tish_images");
$image_show= $con-> prepare($query);
$image_show->execute();
while($record =$image_show->fetch(PDO::FETCH_ASSOC)) {
#this is the Tannery operator to replace a pic when an id do not have one
$photo = ($record['image_name']== null)? "me.png":$record['image_name'];
#display image
echo '<img src="'.$target.$photo.'">';
echo $record['user_id'];
}
?>