【问题标题】:I can' display an image from sql database with php. How is it possible to display it and how can I display more pictures at a time?我不能用 php 显示来自 sql 数据库的图像。如何显示它以及如何一次显示更多图片?
【发布时间】:2015-08-30 15:21:56
【问题描述】:

我正在尝试显示来自 mysql 数据库的图片,但不知何故它不起作用。图片为jpeg格式。我使用带有数据库连接文件和源文件的简单 php 代码。奇怪的是,如果我想直接从数据库中下载图片,它会保留为二进制 .bin 文件。这是我的代码:

db_connect.php:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=probe', $root);
?>

source.php:

<?php
include ‘db_connect.php’;
$query = “select * from users”;
$stmt = $con->prepare( $query );t
$stmt->bindParam($_GET['image']);
$stmt->execute();
$num = $stmt->rowCount();
if( $num ){
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    header(“Content-type: image/jpeg”);
    print $row['image'];
    exit;
}else{
    //if no image found with the given id,
    //load/query your default image here
}
?>

而在索引文件中我只是调用source.php来显示图片:

<img src="../reg/source.php" >

这是 SQL 源代码:

CREATE TABLE IF NOT EXISTS `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `image` blob NOT NULL,
      `image_type` varchar(100) NOT NULL,
      `image_size` varchar(100) NOT NULL,
      `image_name` varchar(100) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `name` (`name`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=44 ;

【问题讨论】:

  • 不清楚这些花括号 ‘ ’“ ” 是否是您实际代码的一部分,包括 ;t 中的“t”
  • 这是我的错。我应该更仔细地查看它并发布正确编码的版本。对不起!
  • 在进行了更多挖掘之后,您还缺少一些 WHERE id = ? 以插入到 select * from users 中作为示例,因为您没有绑定任何东西。您可能已经在 codeofaninja.com/2011/02/… 找到了该代码 - 这是另一个答案 stackoverflow.com/a/22352477 的示例。

标签: php sql image


【解决方案1】:

这里有一些问题,我不确定我在 cmets 中所说的那些花引号是否是您代码的一部分,包括 );t 中的“t”

如果是这样,‘ ’“ ” 需要分别更改为 '"

但是,您的连接使用的是$dbh,而您在查询中使用的是$con

$dbh = new PDO('mysql:host=localhost;dbname=probe', $root);
^^^^                                                ^^^^^ unknown

和查询:

$stmt = $con->prepare( $query ); // minus the "t" of course.
        ^^^^
  • 这会导致您的查询在此处失败。

但是,$root 未知且未发布。

检查错误:

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存阶段显示错误,而不是在生产阶段。

在连接打开后立即添加$dbh-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  • $dbh$con,取决于您使用的变量。

【讨论】:

  • 这很有帮助,因为我犯了一些平庸的错误,但是我收到了这样一个“损坏的图像”文件:supertintin.com/blog/wp-content/uploads/2011/02/…
  • @Adam.Biczo 可能是路径问题。将错误报告添加到您的打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,以查看它是否产生任何结果。和var_dump($_GET['image']); 我不知道你是怎么得到它的,URL? file.php?image...?
  • @Adam.Biczo 同样,如果您的blob 列太小而无法容纳较大的图像,您将需要使用LONGBLOB。失败的原因可能有很多。
  • @Adam.Biczo 这行$stmt-&gt;bindParam($_GET['image']); 修改为$stmt-&gt;bindParam($_GET['image']), PDO::PARAM_LOB; 试试看。另外,您的 GET 方法可能无法识别您如何检索它,这对我们/我来说是未知的。根据我发现的一个例子,$query-&gt;bindColumn(1, $image, PDO::PARAM_LOB); 甚至可能是从stackoverflow.com/a/5999568 提取的$query-&gt;fetch(PDO::FETCH_BOUND); --- 即$row = $stmt-&gt;fetch(PDO::FETCH_BOUND); 建议。
  • @Adam.Biczo 最后,因为我能想到的就是删除$num = $stmt-&gt;rowCount(); 及其条件语句。我没有选择。
【解决方案2】:

这就是我在数据库中上传图片的方式。你是绝对正确的,因为我使用了这个网站的代码:http://www.phpro.org/tutorials/Storing-Images-in-MySQL-with-PHP.html。但我对代码做了一些更改。

     <?php
        if(!isset($_FILES['userfile']))
            {
            echo '<p>Please select a file</p>';
            }
        else
            {
            try    {
                upload();

                echo '<p>Thank you for submitting</p>';
                }
            catch(Exception $e)
                {
                echo '<h4>'.$e->getMessage().'</h4>';
                }
            }
        ?>

        <?php 

        function upload(){

        if(is_uploaded_file($_FILES['userfile']['tmp_name']) && getimagesize($_FILES['userfile']['tmp_name']) != false)
            {
            $size = getimagesize($_FILES['userfile']['tmp_name']);
            $type = $size['mime'];
            $imgfp = fopen($_FILES['userfile']['tmp_name'], 'rb');
            $size = $size[3];
            $name = $_FILES['userfile']['name'];
            $maxsize = 100000;
             if($_FILES['userfile']['size'] < $maxsize )
                {
                $dbh = new PDO("mysql:host=localhost;dbname=probe", 'root', '');
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $stmt = $dbh->prepare("UPDATE users SET image='$imgfp', image_type='$type', image_size='$size', image_name='$name' ");
      $stmt->execute();
                }
            else
                {

                throw new Exception("File Size Error");
                }
            }
        else
            {

            throw new Exception("Unsupported Image Format!");
            }
        }
        ?>

这就是我检索图片的方式。

<div class="row">
            <div class="col-md-3 col-sm-3">

                <form
                    img src="../reg/source.php" method="get" ></form></div></div>

【讨论】:

  • &lt;form img src="../reg/source.php" method="get" &gt;?这是你的解决方案吗?
  • 是的,我写的。为什么?有没有错误?因为我仍然无法弄清楚,正确的独奏可能是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2018-04-02
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
相关资源
最近更新 更多