所以我有一个 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 , 或 PDO与 prepared statements .
关于php - 基于 php 变量的唯一图像 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459731/