如何用PHP从MySQL中提取随机图像?

时间:2014-09-03 00:58:07

标签: php mysql

我在使用网络应用程序时学习PHP / MySQL。此应用程序的一部分要求从标题为“htdocs / full”的图像目录中回显一个随机图像。除了'first_name''last_name'的列之外,数据库还在标题为'image_path'的列中保存每个图像的路径。

我能够从数据库调用一个随机行,我可以让它显示来自'first_name'和'last_name'列的文字数据。但是我很难让它从'image_path'列中获取路径并将其转换为图像而不是文字。

我在过去24小时内一直在尝试多种方法,但我在Stack和Google上看到的大部分内容都是直接从目录中提取图像而不使用数据库行(这是由于相应的'first_name'和'last_name'而需要。)

这是我到目前为止所做的事情(尽管我也有很多不同的变化,我认为这是我最接近的变化):

<?php 
   $username="root";$password="*********";$database="offenders";

   mysql_connect('localhost',$username,$password);

   mysql_select_db($database) or die( "Unable to select database");

   $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
   $aResult = mysql_query($sSQLQuery); 
   WHILE($aRow = mysql_fetch_array($aResult)):
   {
     header("Content-Type:image/jpeg");
     echo "<img src='php/imgView.php?imgId=".$aRow['image_path']."' />";
   }

  ENDWHILE; 

?>

它生成一个页面,左上角有一个微小的破碎图像。我已经尝试过回显$ aRow以及$ aRow ['image_path'],如上所示,以及其他一些似乎会导致错误的调整。我有什么想法吗?

非常感谢!

更新的代码:

<?php 
       $username="root";$password="*******";$database="offenders";

       mysql_connect('localhost',$username,$password);

       mysql_select_db($database) or die( "Unable to select database");

           $src="full/";

           //if you have any problem in the solution check this line,
//means weather you are providing right path for your files or not.


       $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
       $aResult = mysql_query($sSQLQuery);                     
       $aRow = mysql_fetch_array($aResult);                


       $file_path=$src.$aRow["image_path"];
       //echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';
           echo "<img src=".$file_path." />".'<br/>';
           //echo "<img src=full/1b2ba2f9a8b8ee9c062b09767535d69bd954e125.jpg>";



    /*  if(isset($_GET['imgId']))
      {
    //i am query only first_name but you can add for field as you want
    //and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure.

         $sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'";
       $aResult = mysql_query($sSQLQuery);
      WHILE($aRow = mysql_fetch_array($aResult)):
       {
         echo $aRow['first_name'];
       }

      ENDWHILE; 
      }
      */
    ?>

2 个答案:

答案 0 :(得分:0)

这里有几个问题。

  • 循环中有数据库输出。而不是

    WHILE($ aRow = mysql_fetch_array($ aResult)):    { ...    }

    ENDWHILE;

使用:

 $aRow = mysql_fetch_array($aResult);
...
  • 您将返回看似HTML的内容,但您的内容类型为JPG。返回HTML并使用适当的内容类型或返回JPG,然后返回。
  • 如果要返回JPG本身(而不是HTML),请使用CURL抓取写入图像并将其返回。

答案 1 :(得分:0)

在我看来,我不知道你为什么要运行while循环,因为在你的查询中你有一个限制,所以你不必运行while循环。

假设您的图像文件夹名称为php / image /,而不是图像

我正在编写我的解决方案,假设您的图像位于图像文件夹中,如果不是,您只需更改解决方案中的$ src值即可。

我也在想你想把这些图像用作链接,所以你可以在图像上点击一下时获取first_name和last_name,我之所以这么想,你试图在img src =&#34;&#34;,

我写两个解决方案的任何方式看哪一个适合你。第一个将使它们链接,第二个只从数据库中提取图像。

第一个假设您想从数据库中提取first_name和last_name,只需点击一下图像

 <?php 
       $username="root";$password="";$database="offenders";

       mysql_connect('localhost',$username,$password);

       mysql_se

lect_db($database) or die( "Unable to select database");

           $src="php/image/";//if you have any problem in the solution check this line,
//means weather you are providing right path for your files or not.


       $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
       $aResult = mysql_query($sSQLQuery);                     
       $aRow = mysql_fetch_array($aResult);                


       $file_path=$src.$aRow["image_path"];
       echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';



      if(isset($_GET['imgId']))
      {
    //i am query only first_name but you can add for field as you want
    //and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure.

         $sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'";
       $aResult = mysql_query($sSQLQuery);
      WHILE($aRow = mysql_fetch_array($aResult)):
       {
         echo $aRow['first_name'];
       }

      ENDWHILE; 
      }
    ?>

第二种解决方案只从数据库中提取图像

在isset条件下删除isset条件和while循环。

并更改此行

echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';

    echo "<img src=".$file_path." />".'<br/>';

    //if you notice the only different is this that i 
//remove the <a> tag in its path, so not it gonna pull images
// from the database but you cant use them as link.

由于

这个解决方案工作正常,如果它不发布你的文件夹结构,意味着你有图像和这个文件imgView。我从解决方案中删除了你的while循环,

//