2016-05-13 56 views
0

错误:尝试将图像上载到数据库,然后显示数据库。得到一个致命错误

Fatal error: Uncaught Error: Call to a member function bind_param() on boolean in C:\xampp\htdocs\FinalProject\upload-profilePic.php:22 Stack trace: #0 {main} thrown in 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; 
} 
?> 
+0

什么是$ con?以及它是如何创建的? –

+0

您可以尝试不将图像直接上传到您的数据库。您只需将链接作为参考插入数据库即可。然后,您可以稍后调用该链接来获取图像并将其用于您网站的任何位置。希望这是有道理的。 –

+0

@IanKemp $ con是我与数据库的连接。它被定义。我更改了一个列名,但没有更新它。感谢您的帮助。 – ferrari3000

回答

3

通过考虑你的情况下,问题的关键在于:

$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时发生的错误。

+0

非常感谢你的帮助!呃,我觉得很愚蠢。我更改了一个列名,并没有更新所有内容。 – ferrari3000

0

您的错误消息说bind_param正在运行boolean。这通常是通过$stmt造成的是false,因为$con->prepare()失败:

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

我可以看到$con是不是在你的代码中定义。你可以在这两行代码之前验证它是否存在?

var_dump($con); 
+0

$ con是我与数据库的连接。它被定义。我更改了列的名称,但没有更新它。 – ferrari3000