【问题标题】:fetch images from multiple mysql tables using php使用 php 从多个 mysql 表中获取图像
【发布时间】:2012-05-27 04:54:24
【问题描述】:

过去几天我一直在尝试了解如何从多个表中获取数据,但我不能说我完全了解它的工作原理。无论如何:)

我想要做的是使用搜索栏来获取存储在多个表中的图像来定义参数,即艺术家姓名(我知道将图像存储在数据库中可能会导致很多问题,但这对大学来说是一个练习所以我真的无能为力)

所以现在具体说一下。我有 5 个表,分别称为 animaldata、cardata、landscapedata、peopledata 和 otherdata。每个表都有以下字段:1 id 2 艺术家名称 3 详细信息 4 照片 5 照片类型和 6 日期。其中artist_name 是上传图片的登录人的姓名,details 是标题,photo 是要保存的blob 项目,phototype 是图片的.. 井类型:P

所以我想做的是,当有人使用搜索栏搜索艺术家时,代码可以从艺术家上传的所有表格中获取并显示所有图像。

这是我用来从 1 个表中获取数据的代码,但我不知道如何更改它以便也搜索其他表。

那就是search.php

<?php
mysql_connect ("localhost","root","")  or die (mysql_error());
mysql_select_db ("photo_album_db");

$term = $_POST['term'];

$sql = mysql_query("select * from animaldata where artist_name like '%$term%'");

while ($row = mysql_fetch_array($sql)){
    echo $row['details'];
echo "</br>";
echo "<img src=getan.php?id=".$row['id']." width=250 height=200/>";
echo "</br>";
}
?>

搜索栏的形式如下: &lt;form action="search.php" method="post"&gt;&lt;input type="text" name="term" /&gt;&lt;input type="submit" name="search" value="Search" /&gt;&lt;/form&gt;

提前感谢您的任何建议,如果您需要更多“线索”,请告诉我:) :) :)

【问题讨论】:

  • 您的代码容易受到 SQL 注入的攻击。您确实应该使用准备好的语句,将变量作为参数传递到其中为 SQL 评估。如果您不知道我在说什么或如何解决它,请阅读 Bobby Tables 的故事。
  • 如果他的教授尝试对他进行 SQL 注入,我发誓我会飞到那里去和那些坏蛋打个招呼!

标签: php mysql image fetch multiple-tables


【解决方案1】:

试试这个:

// set up database connection ... 

$term = my_awesome_sanitizer($_POST['term']);

$tables = array("animaldata", "cardata", "landscapedata", "peopledata", "otherdata");
foreach ($tables as $table)
{
    $sql = mysql_query("select * from $table where artist_name like '%$term%'");
    while ($row = mysql_fetch_array($sql))
    {
        echo $row['details'];
        // show stuff ....
    }
}

【讨论】:

  • 这会对数据库进行 5 个单独的查询,至少 union join 所有查询,以便一次发送所有查询。
  • @Mihai 有效点,但 OP 正在尝试了解基础知识,此解决方案更易于理解和维护,但性能损失很小。
【解决方案2】:

如果它们具有相同的列,则要更改表,然后使用:

$sql = mysql_query("select animaldata.artist_name AS animaldata_artist_name, cardata.artist_name AS cardata_artist_name /* do this for all columns in all tables, or mor specifically for the columns you need  */ from animaldata AS a, cardata AS c, landscapedata AS l, peopledata AS p where a.artist_name like '%$term%' OR c.artist_name like '%$term%' OR l.artist_name like '%$term%' OR p.artist_name like '%$term%'");

试试这个来显示图像:

<img src="data:image/jpeg;base64,".base64_encode($row['image_blob'])." width...

这不会单独请求照片。它将图像的内容嵌入到 HTML 中。

data:uri 协议支持该技术。

【讨论】:

  • 谢谢,我已经更改了这些内容,但是当我搜索艺术家姓名时,只会出现一个空白页面,其中没有任何内容(但也没有错误)
  • 如果你正在运行 linux,请尝试“php -l /path/to/file.php”来检查语法/解析错误。
  • 如果您直接访问的文件 (example.com/page.php) 有语法/解析错误,则不会显示它们。仅当包含文件时才会显示它们。
  • 我的电脑上目前没有 linux。你认为我应该制作一个单独的 php 页面来从数据库中获取数据和图像,而不是
  • 好的,它现在可以工作了.. 但似乎还有另一个问题.. 假设我搜索“ekptwtos”,有 3 张动物图像和 2 张人图像,它只显示 2 张照片最后一张桌子的人(在这种情况下是人)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 2012-12-20
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多