【问题标题】:Trying to upload an image to, and then show from, a database. Getting a fatal error尝试将图像上传到数据库,然后从中显示。遇到致命错误
【发布时间】:2016-05-13 07:13:33
【问题描述】:

错误:

致命错误:未捕获的错误:在 C:\xampp\htdocs\FinalProject\upload-profilePic.php:22 中调用布尔值上的成员函数 bind_param() 堆栈跟踪:#0 {main} 在 C:.. .

我的代码:

上传图片

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (file_exists($_FILES['upload_file']['tmp_name'])) {
    // get temp name and file name
    $tmpName = $_FILES['upload_file']['tmp_name'];
    $fileName = $_FILES['upload_file']['name'];
    $type = $_FILES['upload_file']['type'];

    $handler = fopen($tmpName, 'r'); // opens image file stream
    $data = fread($handler, filesize($tmpName)); // read byte data
    fclose($handler); // close image file stream

    $stmt = $con->prepare('insert into images (image_type,
        filename, image_data) values(?, ?, ?)');
    $stmt->bind_param('sss', $type, $fileName, $data);
    $stmt->execute();
    $result = $stmt->get_result();
    if (!$result) {
        echo $con->error;
    }
  }
}

$result = $con->query('select * from images');
if ($result) {
    foreach ($result as $img) {
        $name = $img['filename'];
        $id = $img['image_id'];
        $url = "get-profilePic.php?id=$id";
        echo "<h3>$name</h3>";
        echo "<img src=\"$url\" alt=\"$name\" />\n\n";
    }
}
?>

获取图片

<?php

$imageId = $_GET['id'];
$result = $con->query("select * from images
where image_id = $imageId");

if ($result) { 
    $image = $result->fetch_object();
    $type = $image->image_type;
    $data = $image->image_data;
    header('Content-Type: ' . $type);
    echo $data;
}
?>

【问题讨论】:

  • 什么是$con,它是如何创建的?
  • 您可以尝试不将图像直接上传到您的数据库。您需要做的就是插入链接作为对您的数据库的引用。然后您可以稍后调用该链接以获取图像并在您网站的任何位置使用它。希望这是有道理的。
  • @IanKemp $con 是我与数据库的连接。它被定义。我更改了列名,但没有更新它。感谢您的帮助。

标签: php mysql


【解决方案1】:

考虑到你的场景,问题出在:

$stmt = $con->prepare('insert into images (image_type, filename, image_data) values(?, ?, ?)');
$stmt->bind_param('sss', $type, $fileName, $data);

prepare() 方法可以返回 false,需要检查它为什么返回 false,可能是表名或列名(在 SELECT 或 WHERE 子句中)不正确?主要是您的查询中有一些错误。

另外,尝试使用$stmt ->error_list 之类的东西来检查在解析 SQL 时出现的错误。

【讨论】:

  • 非常感谢您的帮助!呃,我觉得自己很笨。我更改了一个列名,但没有更新所有内容。
【解决方案2】:

您的错误消息显示bind_param 正在boolean 上运行。这一般是$stmt变成false造成的,因为$con-&gt;prepare()失败了:

$stmt = $con->prepare('insert into images (image_type,
    filename, image_data) values(?, ?, ?)');
$stmt->bind_param('sss', $type, $fileName, $data);

我可以看到$con 没有在您的代码中定义。你能在这两行代码之前验证它存在吗?

var_dump($con);

【讨论】:

  • $con 是我与数据库的连接。它被定义。我更改了一个列的名称,但没有更新它。
猜你喜欢
  • 2015-04-26
  • 2020-04-23
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多