升级到php7后无法通过php检索和显示mysql中的图像

时间:2016-10-20 21:15:28

标签: php mysql

我希望这个问题在其他地方没有发布/回答。搜索没有产生任何令人满意的结果,所以我希望有人可以帮助我。

我使用下面的代码显示mysql数据库中的图像。用于与PHP 5.6完美配合。今天我升级到php7,我根本无法让它工作。

显示错误消息:

  

无法获取数据:。

这是代码。如果可以的话请帮忙。将受到高度赞赏。

    <?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysqli_error());
}
$sql = 'SELECT * FROM table ORDER BY id DESC LIMIT 5';

mysqli_select_db('my_db');
$retval = mysqli_query( $sql, $conn );
if(! $retval )
{
  die('Could not get data: ' . mysqli_error());
}
while($row = mysqli_fetch_array($retval, mysqli_NUM))
{
    echo "{$row[0]}". "<em>" . "({$row[1]})"."</em>"."<br>";
}
mysqli_close($conn);
?>

Thanx所有有用的评论。我编辑了我的代码。它现在显示路径和图像文件名,但不显示图像。 (图像/化身/ filename.jpg)。这是修改后的代码:     

    mysqli_select_db($conn, 'my_db');
    $retval = mysqli_query( $conn, $sql );
    if(! $retval )
    {
      die('Could not get data: ' . mysqli_error($conn));
    }
    while($row = mysqli_fetch_array($retval, MYSQLI_NUM))
    {
        echo "{$row[0]}". "<em>" . "({$row[1]})"."</em>"."<br>";
    }
    mysqli_close($conn);
?>
你好。我设法让它运作起来。谢谢大家的帮助和耐心。建议我改为echo "<img src='".$row['0']."'/>"."<br>"; echo "{$row[1]}". "<em>" . "({$row[2]})"."</em>";

3 个答案:

答案 0 :(得分:2)

您的代码中存在一些错误。

  • mysqli_select_db('my_db')需要数据库连接作为第一个参数。
  • mysqli_select_db($conn, 'my_db')

但是,您可以轻松使用所有4个参数:

  • $conn = mysqli_connect($dbhost, $dbuser, $dbpass, 'my_db');

参考:

然后:

  • mysqli_error()需要一个参数。
  • mysqli_error($conn)

然后:

  • mysqli_query( $sql, $conn )您需要反转这些,连接必须是第一个。
  • mysqli_query( $conn, $sql )

参考文献:

并且确定,table如果这是你的真实表名,则是MySQL保留字:

所以用滴答包裹它

$sql = 'SELECT * FROM `table` ORDER BY id DESC LIMIT 5';

<强>脚注:

由于MYSQLI_NUM是PHP中的常量,mysqli_NUM可能会失败,因此您可能需要将其全部设为大写MYSQLI_NUM

参考:

附加说明:

您的问题的标题包含“无法检索和显示图像”

由于没有<img>标签,我看不到您要在何处显示图片。

  

“显示错误消息:

     

无法获取数据:“

这告诉我您的PHP配置错误,或者您以file:///而不是http://localhost访问它。

或者,正如我已经概述的那样,mysqli_error()需要一个db连接参数,你的不包含它并且错误输出但是你没有看到它正在抛出的消息。

还使用错误报告并捕获并显示:

正如布莱克在评论中所述:

  

“您是否也更新了mysql包?PHP7使用了不同的包。”

因此,请确保您的安装成功并且所有系统文件都已正确更新并指向正确的路径/ .ini文件,并且您重新启动了所有服务并且正在运行。

参考 从PHP 5.6.x迁移到PHP 7.0.x

正如RiggsFolly在评论中所说:

“您在执行mysqli_fetch_array()后正在使用SELECT *,因此我们无法了解返回的列以及任何列中的内容。”

和...

“PS:将mysqli_fetch_array()SELECT *一起使用是非常危险的。如果有人改变数据库中列的顺序,您可能会在{{1}中返回不同的列比你测试这段代码的地方。使用$row[0]然后你会得到像mysqli_fetch_assoc()$row['id']这样的NAMED列。“

我会再说一遍;您需要使用$row['filename']才能显示图像。您显示的代码不会自动显示图像,而<img src...>就是这样。

答案 1 :(得分:1)

我认为您已经交换了db Link和Query参数..

$retval = mysqli_query( $sql, $conn );

应该是

$retval = mysqli_query( $conn, $sql );

答案 2 :(得分:0)

我相信你曾经在之前的php版本中使用mysql _ *()函数,并在升级到php7时更改为mysqli。

尽管mysqli可以与mysql扩展非常相似地使用,但是存在细微差别。

  1. 您可以在创建连接时选择默认数据库。
  2. mysqli_query()中的连接和查询参数相反。
  3. 还有其他差异,所以请在向mysql _ *()函数添加字母i之前阅读文档!