php - 基于 php 变量的唯一图像 url

标签 php mysql

所以我有一个 mySQL 数据库,其中包含 800 多张带有唯一数值的 blob 图像。我的目标是使用 php 文件访问图像和数字,以根据数字或“carno”在不同的页面上显示每个图像。

例如:pl0x.net/image.php/?carno=500 将显示来自数据库的图像,其中“carno”sql 变量等于 500

一周前我用这段旧代码完成了这个工作:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$conn = mysql_connect(".....");
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("....", $conn);
if(!$db)
{
echo mysql_error();
}
$carno = $_GET['carno'];
$q = "SELECT carphoto,carphototype FROM carmodelpictures where carno='$carno'";
$r = mysqli_query("$q",$conn);
if($r)
{
$row = mysql_fetch_array($r);
$type = "Content-type: ".$row['carphototype'];
header($type);
echo $row['carphoto'];
}
else
{
echo mysql_error(); 
}
?>

在我的虚拟主机更新后,这段代码停止工作,所以我一直在尝试无误地复制它。

目前我有一些代码可以显示我所有的 885 张图片,但是当我右键单击并选择“在新选项卡中打开图片”时,url 只是“数据:”

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$conn = mysqli_connect("......");
if(!$conn)
{
echo mysql_error();
}

$q = "SELECT * FROM carmodelpictures";
$r = mysqli_query($conn, $q);
if($r)
{
while($row=mysqli_fetch_array($r))
{
$result=mysqli_fetch_array($r);

echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['carphoto'] ).'"/>';
}
}

?>

对 php 和 html 非常缺乏经验,任何想法或意见将不胜感激!

最佳答案

"I had this working a week ago with this old code:" (mysql code).

如果您的 mysql_ 方法有效,那么使用您正在使用的方法,只需将 i 添加到需要数据库连接并使用 mysqli_< 的函数中 连接。您还在此处将 mysql_error()mysqli_ 混合使用,这是行不通的。

它需要读作mysqli_error($conn)


旁注:您的第一个代码主体包含 $r = mysqli_query("$q",$conn); 我发现很难相信它确实有效,因为您还混合了 MySQL API(mysql_connect() 用于连接,然后是 mysqli_query() 用于查询)。除非那是你的错字。

应该读作 $r = mysql_query($q,$conn);


那么这是它也不起作用的另一个(有贡献的)原因 $db = mysql_select_db("....", $conn);,您也在此处混合使用 MySQL API。它需要在 mysql_ 旁边添加 i 并且连接在前(在 mysqli_ 中)。

应该读作 $db = mysqli_select_db($conn, "your_db");
(但我已经从下面的重写中删除了它并改为使用所有 4 个参数)。

我很惊讶错误报告没有给您带来任何问题,或者您没有将其包含在您的问题中。


这里是一个重写:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$conn = mysqli_connect("yourhost", "user", "password", "your_db");

    if(!$conn)
    {
        echo mysqli_error($conn);
    }

if(isset($_GET['carno'])){

$carno = (int)$_GET['carno']; // Using (int) since you're using ?carno=500
$q = "SELECT carphoto, carphototype FROM carmodelpictures where carno='$carno'";
$r = mysqli_query($conn, $q);
    if($r)
    {
    $row = mysqli_fetch_array($r);
    $type = "Content-type: ".$row['carphototype'];
    header($type);
    echo $row['carphoto'];
    }
    else
    {
        echo mysqli_error($conn); 
    }

}
?>

但是,你现在的代码是开放给SQL injection的.使用 mysqli_* with prepared statements , 或 PDOprepared statements .

关于php - 基于 php 变量的唯一图像 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459731/

相关文章:

mysql - 反规范化以减少 COUNT 和 AVG 等聚合函数(计算)的使用 : worth it?

python - 将 Maya 2011 与 Mysqldb 连接

php - 剥离危险的 html 标签、mysql 注入(inject)并在 php 中保留 'good' 标签的最佳方法

php - 为什么我的 Cake 插件中的 JavaScript 文件被解析为 PHP?

php - 创建一个高效的分页系统

php - 获取mysql中部分填充的数据

mysql - 从同一张表的n-n关系中提取数据

php - 使用 GET 的 AJAX API

sql - 从下面给定的 MySQL 数据库表结构中获取所需的结果

php - PDO/PHP LoginScript 使用 MAMP 以错误 500 结束