2016-05-13 7 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を返す可能性があり、偽を返す理由を確認する必要があります(SELECTまたはWHERE句のテーブル名または列名が正しくない可能性があります)。主にクエリに何らかのエラーがあります。

また、$stmt ->error_listのようなものを使用して、SQLの解析で発生したエラーを確認してください。

+0

ご協力いただきありがとうございます!うん、私は気が気になる。私はカラム名の1つを変更し、すべてを更新しませんでした。 – ferrari3000

0

booleanbind_paramが実行されているというエラーメッセージが表示されます。 $con->prepare()が失敗したので、これは一般的に、falseする$stmtによって引き起こされる:私は$conがあなたのコードで定義されていないことがわかります

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

。これら2行のコードの前に存在することを確認できますか?

var_dump($con); 
+0

$ conはデータベースへの接続です。定義されています。私は列の名前を変更し、それを更新しませんでした。 – ferrari3000

関連する問題