试图从MySQL数据库中以PHP显示图像

时间:2011-12-09 00:24:53

标签: php mysql html

我尝试使用PHP使用以下代码显示图像

<?php
header('Content-type: image/png');
 $port = "*";
 $server = "*:".$port;
 $dbname ="*";
 $user = "*";

 $conn = mysql_connect ("$server", "$user", "$pass") or die ("Connection
 Error or Bad Port");

mysql_select_db($dbname) or die("Missing Database");


    $speakerPic = $_POST['speakerPic'];
    $query = "SELECT Speaker.speaker_picture AS image FROM  Speaker JOIN Contact c USING(contact_id) 
    WHERE c.lname = '";
    $query .= $speakerPic."';";


$result = mysql_query($query,$dbname); 
$result_data = mysql_fetch_array($result, MYSQL_ASSOC);

echo $result_data['image'];   
?>

我一直收到此错误,无法显示图片“... / query2.php”,因为它包含错误。

很抱歉继续烦你们,但是有人能说出问题所在吗?

1 个答案:

答案 0 :(得分:0)

不会撒谎,OP代码有很多不好的地方。

  1. 你应该通过id从数据库中提取图像,而不是某些字符串
  2. 您没有清理查询中使用的var
  3. 如果不存在,则不提供默认图像
  4. 另外,我建议将文件uris存储在数据库中,而不是实际图像(blob)。您应该在文件系统上存储指向图像的指针。
  5. 不要过多地清理代码,只是让它变得不那么糟糕。我建议沿着这些方向(未经测试):

    // Utility.php
    class Utility
    {
        /**
         *
         * @param mixed $id is abstract, could be name or an actual id
         * @return string?
         */
        public static function getImage($id)
        {
            try {
                $port = "*";
                $server = "*:".$port;
                $dbname ="*";
                $user = "*";
    
                $conn = mysql_connect ("$server", "$user", "$pass");
    
                if (!$conn) {
                   throw new Exception("Connection Error or Bad Port");
                }
    
                if (!mysql_select_db($dbname)) {
                    throw new Exception("Missing Database");
                }
    
                $query = "SELECT Speaker.speaker_picture AS image FROM  Speaker JOIN Contact c USING(contact_id) WHERE c.lname = " . mysql_real_escape_string($id). ";";
    
                $result = mysql_query($query,$dbname); 
                $result_data = mysql_fetch_array($result, MYSQL_ASSOC);
    
                if (!isset($result_data['image'])) {
                    throw new Exception('Image not found');
                }
    
                echo $result_data['image'];
    
             } catch Exception($e) {
    
                 error_log($e->getMessage();
    
                 return file_get_contents('/path/to/some/default/image.png');
             }   
        }
    }
    
    // image.php
    require_once 'Utility.php';
    
    header('Content-type: image/png');
    ob_start();
    Utility::getImage($_POST['speakerPic']);
    $image = ob_get_flush();
    
    echo $image;