图像无法使用路径从数据库中获取

时间:2014-03-12 12:27:06

标签: php mysql database image fetch

我尝试使用路径从数据库上传和获取图片。上传过程完美运行。但是,我无法从db获取图像。我试过了print_r($row['image']);。我正在获得这样的路径C:/xampp/htdocs/xampp/htdocs/www/images/0d13808ad672c2713d306efbb0e42918。我不知道为什么这段代码不能从db中获取图像?

fetch.php

        <?php
            include('config.php');
            ini_set('display_startup_errors',1); a
            ini_set('display_errors',1);
            error_reporting(-1);

            try
            {
                  $stmt = $conn->prepare("SELECT * FROM imgdb WHERE id = 3");
                  $conn->errorInfo();
                  // $stmt->bindParam('1', $imgid, PDO::PARAM_INT);
                  $stmt->execute();

                  // $path = "/xampp/htdocs/www/images/";
                  // $imgpath = $_SERVER['DOCUMENT_ROOT'].$path;
                   while($row = $stmt->fetch(PDO::FETCH_ASSOC))
                    {
                        echo "<img src=".$row['image']." height='100' width='100'/>"; 
                        print_r($row['image']);
                    }
            } 
            catch (PDOException $e) 
            {
                 echo 'Database Error'.$e->getMessage();
            }
        ?>

upload.php的

<?php

    ini_set('display_startup_errors',1);
    ini_set('display_errors',1);
    error_reporting(-1);

      include('config.php');

      if ($_FILES["file"]["error"] > 0)
      {
          echo "Error: " . $_FILES["file"]["error"] . "<br>";
      }
      else
      {
//          echo "Upload: " . $_FILES["file"]["name"] . "<br>";
//          echo "Type: " . $_FILES["file"]["type"] . "<br>";
//          echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
//          echo "Stored in: " . $_FILES["file"]["tmp_name"];
      }


      $filename  = basename($_FILES['file']['tmp_name']);
      $newname = md5($filename);

      $final_save_dir = '/xampp/htdocs/www/images/'.$newname ;
        if(move_uploaded_file($_FILES['file']['tmp_name'], $final_save_dir . $_FILES['file']['name'])) 
        {
            echo "Uploaded";
        } 
        else 
        {
           echo "File was not uploaded";
        }

      $imgid = $_SERVER['DOCUMENT_ROOT'].$final_save_dir;

      try
      {
          $stmt = $conn->prepare("INSERT INTO imgdb ( image ) VALUES ( ? ) ");
          $stmt->bindParam('1', $imgid, PDO::PARAM_STR);
          $conn->errorInfo();
          $stmt->execute();
      }
      catch (PDOException $e) 
      {
          echo 'Database Error'.$e->getMessage();
      }
?>

4 个答案:

答案 0 :(得分:1)

试试这个并与你的比较,我不知道它是否有效,因为我没有经过测试,但它应该。

upload.php的     

include('config.php');

if ($_FILES["file"]["error"] > 0 )
{
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
  else
{
    $filename  = basename($_FILES['file']['tmp_name']);
    $ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);

    $new_file_name = md5($filename).'.'.$ext;

    $final_save_dir = $_SERVER['DOCUMENT_ROOT'].DS.'www'.DS.'images'.DS;
    if(move_uploaded_file($_FILES['file']['tmp_name'], $final_save_dir . $new_file_name)) 
    {
        echo "Uploaded";
    } 
    else 
    {
       echo "File was not uploaded";
    }

    try
    {
        $stmt = $conn->prepare("INSERT INTO imgdb ( image ) VALUES ( ? ) ");
        $stmt->bindParam('1', $new_file_name, PDO::PARAM_STR);
        $conn->errorInfo();
        $stmt->execute();
    }
    catch (PDOException $e) 
    {
      echo 'Database Error'.$e->getMessage();
    }
}

fetch.php

<?php
include('config.php');
ini_set('display_startup_errors',1); 
ini_set('display_errors',1);
error_reporting(-1);

try
{
      $stmt = $conn->prepare("SELECT * FROM imgdb WHERE id = 3");
      $conn->errorInfo();
      $stmt->execute();

       while($row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            echo "<img src='images/".$row['image']."' height='100' width='100'/>"; 
        }
} 
catch (PDOException $e) 
{
     echo 'Database Error'.$e->getMessage();
}

答案 1 :(得分:0)

链接图像时,必须链接到HTTP可访问路径。 使用&#39; /&#39;而不是$ _SERVER [&#39; DOCUMENT_ROOT&#39;]来获得相对于您网页的网络根目录的路径,或者&#39; http://&#39; 。 $ _SERVER [&#39; HTTP_HOST&#39;]。 &#39; /&#39; (第一个更好,因为协议没有定义,所以它可以在http和https连接上工作)

答案 2 :(得分:0)

两件事

  1. move_uploaded_file($_FILES['file']['tmp_name'], $final_save_dir . $_FILES['file']['name'])将文件从临时位置移动到$final_save_dir.$_FILES['file']['name'],这与您在数据库$_SERVER['DOCUMENT_ROOT'].$final_save_dir中存储的值不同。您需要同步这两个变量。

  2. 就像@mrgeek指出的那样,你试图使用不使用http url的绝对文件系统路径来检索图像。如果您使用的是文件系统路径,则需要在该位置前加file:///。但我确信这将被托管在某个地方,所以这无济于事。所以最好的办法是使用相对网址,以便浏览器能够访问它

答案 3 :(得分:0)

一直尝试使用此代码从我的数据库中检索图像,但它只显示一个空白页面。需要帮忙       

   $user="root";
   $host="localhost";
   $pass="name";
   $db="name";

   $link=mysql_connect($host,$user,$pass);
   if(!$link)die(mysql_error());
   mysql_select_db($db,$link) or die("could not select database.");

 $query_image = "SELECT * FROM img WHERE id=12";
 // This query will show you all images if you want to see only one image pass  acc_id='$id' e.g. "SELECT * FROM acc_images acc_id='$id'".
 $result = mysql_query($query_image);
 if(mysql_num_rows($result) > 0)
 {
   while($row = mysql_fetch_array($result))
   {
  echo '<img alt="" src="upload/'.$row["img_base_name"].'">';
   }
 }
 else
 {
  echo 'File name not found in database';
 }
?>