如何从我的mysql数据库中随机检索图像?

时间:2011-04-14 08:22:25

标签: php image random

好的,所以我制作了一个php文件来输出图像,这是输出页面的示例代码:

mysql_connect(“”,“”,“”)或死(mysql_error()); mysql_select_db(“”)或die(mysql_error());

$query = mysql_query("SELECT * FROM store"); 
$number=mysql_num_rows($query); 

$result = mysql_query ("SELECT * FROM store ORDER BY RAND() LIMIT $number");

while ($row = mysql_fetch_assoc($result))     
{       
    echo '<img src=get.php?id=$row["id"]>';
}

img标记引用的get.php具有以下代码:

mysql_connect(“”,“”,“”)或死(mysql_error()); mysql_select_db(“”)或die(mysql_error());

 $id = addslashes ($_REQUEST['id']);


$query = mysql_query("SELECT * FROM store WHERE id= $id ");
$row = mysql_fetch_array($query);
$content = $row['image'];

header('Content-type: image/jpg');
 echo $content;

我所得到的只是输出页面上的一系列撕裂页面图标。我本可以犯一个非常简单的错误,因为我仍在学习php。提前谢谢。

3 个答案:

答案 0 :(得分:1)

清理:

$result = mysql_query("SELECT * FROM store ORDER BY RAND()");

while($row = mysql_fetch_assoc($result)){       
    echo '<img src="get.php?id='.$row[id].'" />';
}

您也可以echo mysql_error();查看您的mysql语句中是否有任何错误。

您还应该使用mysql_real_escape_string()而不是addslashes()

或者考虑PDO以获得更安全的解决方案。

要调试,请转到get.php?id = 1。如果您看到图像get.php正在运行且主文件不正常。

您是否确定get.php连接到数据库以及主文件?

答案 1 :(得分:0)

这个剧本中有一些不合逻辑的东西。

  1. 您可以从商店中选择一切(*等于所有字段)。这非常非常昂贵。如果你想使用它,你应该使用SELECT COUNT(id)FROM store。

  2. 您使用计数来限制。但限制将始终与行数相同。哪个使LIMIT无关紧要?

  3. 您不应使用addslashes来转义您的值。请改用mysql_real_escape_string。 Check it out here

  4. 我不确定您的数据库中有哪些值,也许您可​​以发布一些值?也许您需要执行条带斜线,因为您可能在数据库中使用斜杠保存值?

答案 2 :(得分:0)

  

我所得到的只是输出页面上的一系列撕裂页面图标。

事实上,你为你的网站创建了一种“拒绝服务”攻击,让它运行几十个PHP脚本,每个页面请求打开几十个SQL连接。难怪你的服务器被这样的洪水超载并且没有显示图片。

另请注意您的代码遭受SQL注入 将addslashes更改为intval()或在查询中添加$ id周围的引号(否则转义将毫无意义)