2016-05-13 52 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