【问题标题】:Display BLOB data from SQLITE database using PHP使用 PHP 显示来自 SQLITE 数据库的 BLOB 数据
【发布时间】:2019-07-01 23:27:58
【问题描述】:

希望你们今天过得愉快,我是 SQLITE DB 的新手,所以我对处理 BLOB 数据有点困惑。我尝试了很多东西,但没有一个对我有利。

这是我的代码

插入数据

插入.php

<form method="POST" enctype="multipart/form-data">
        model no:<input type="text" name="model_no"\><span style="color: red"><?php echo $messages["model_no"]; ?></span>
        image:<input type="file" name="image" id="image"\><span style="color: red">
        <input type="submit" value="save" id="save" name="save"/>
        <input type="reset" value="Clear"/>
    </form>

include.php

<?php
    $flag = 0;
    class MyDB extends SQLite3
    {
        function __construct()
        {
            $this->open('../database.db');
        }
    }

    //checking save button is clicked
    if(isset($_POST["save"])){
        $model_no = $_POST['model_no'];
        $image = $_FILES['image']['name'];

        if($model_no != '' && $image != ''){
            $flag = 1;
        }

        if($flag == '1'){
            $db = new MyDB();

            if(!$db){
                echo $db->lastErrorMsg();
            } 
            else{
                    $dbb = new MyDB();

                    $sql = 'SELECT COUNT(*) as count FROM fisfis WHERE model_no =  "'.$model_no.'"';

                    //echo $sql;

                    $rows = $dbb->query($sql);
                    $row = $rows->fetchArray();
                    $numRows = $row['count'];
                    //echo $numRows;

                    if($numRows != 0){
                        $flag = 0;
                        echo "error:this model no is already taken";
                    }else{
                        $sqlp = "INSERT INTO fisfis(model_no, image) values('$model_no','$image')";

                        if($dbb->exec($sqlp)){
                            echo "data inserted successfully\n";
                        }
                        else{
                            echo"error:\n";
                            echo "data not inserted \n";
                            echo"contact admin for details\n";
                        }
                    }

           }
        }
        else{
                        echo"error:\n";
                        echo "data not inserted : data fields cannot be empty\n";
            }

    }   
?>

这是非常成功地将数据插入我的表(表名:fisfis)

显示数据

显示.php

<form method="POST" enctype="multipart/form-data">
        <p>Enter Barcode : <input type="text" name="search_model" id="search_model" /></p> 
        <!--<p><img src='image.php?id=<?php //echo $row['model_no'];?>'/></p>-->
        <p><input type="submit" value="search" name="search" id="search"/></p>
    </form>

display_include.php

<?php

    $flag2 = 0;
    $flag3 = 0;

    class MyDB extends SQLite3
    {
        function __construct()
        {
            $this->open('../database.db');
        }
    }

    $db = new MyDB();

    if(isset($_POST["search"])){
        $model_no = '';
        $model_no = $_POST['search_model'];

        if($model_no != ''){
            $flag2 = 1;
        }

        if($flag2 == '1'){
            $db = new MyDB();

            if(!$db){
                echo $db->lastErrorMsg();
            } 

            else{
                $dbb = new MyDB();

                $sql = 'SELECT COUNT(*) as count FROM fisfis WHERE model_no =  "'.$model_no.'"';

                $rows = $dbb->query($sql);
                $row = $rows->fetchArray();
                $numRows = $row['count'];
                echo $numRows;

                if($numRows == 0){
                    echo 'sorry this model no is not exists';
                    echo '<br/>';
                    echo '<a href="insert_controller.php">create new</a>';
                    $flag2 = 1;
                }else{
                    echo "this is exisists";
                    $flag3 = 1;
                }

                if($flag3 == 1){
                    $sqla = 'SELECT * FROM fisfis WHERE model_no =  "'.$model_no.'"';
                    $result = $dbb->query($sqla);

                    while($row = $result->fetchArray(SQLITE3_ASSOC) ) {

                        echo "MODEL NO = ". $row['model_no'] ."\n";

                        $img = '\'<img src="'. $row['image'] .'" width="100" height="100"/>\'';
                        echo $img;

                   }

                }

            }

        }
    }


?>

显示部分显示除blob以外的所有数据,我尝试过的

1.尝试在php脚本中回显图片

$img = '\'<img src="'. $row['image'] .'" width="100" height="100"/>\'';
  1. 尝试在html标签内显示图片

但这不起作用,请帮我解决这个问题,提前谢谢

【问题讨论】:

    标签: php image sqlite blob


    【解决方案1】:

    我的解释不好,所以这里是展示和讲述。我做了一个复制,所以我不会忘记任何必要的部分。

    数据库表已定义:

    CREATE TABLE `imgrepro` (
            `id`    INTEGER NOT NULL,
            `photo` BLOB,
            PRIMARY KEY(`id`)
    );
    

    以一行为种子,id = 1,照片为NULL。

    POST 块会将图像插入到数据库中的 BLOB 列中。脚本的其余部分将获取图像并且 html 将显示它。

    <?php
    
        $db = new SQLite3("***********\stacktest.db"); 
    
        if ($_SERVER['REQUEST_METHOD'] == "POST") {
            // insert photo
            $photo = file_get_contents($_FILES['fname']['tmp_name']);
            $query = $db->prepare("UPDATE imgrepro set photo = :photo where id = 1");
            $query->bindValue(':photo',$photo,SQLITE3_BLOB);
            $result = $query->execute();
        }
        // get photo if there is one
    
        $rows = $db->query("SELECT * from imgrepro")->fetchArray(SQLITE3_ASSOC);
    
    
        $showphoto="";
        if (count($rows) > 0) {
            $showphoto=base64_encode($rows['photo']);
        }
        $db->close();
    
    ?>
    <!DOCTYPE html>
    <head>
    <title>Say Cheese!</title>
    </head>
    <!-- show the photo -->
    <img  alt="no photo yet" src="data:image/jpeg;base64,<?= $showphoto ?>" >
    <form action="imgrepro.php" method="post" enctype="multipart/form-data">
    <input type="file" name="fname" accept=".jpg">
    <input type="submit">
    </form>
    

    【讨论】:

    • 可能图像不是“真实”的 BLOB 数据。答案已修改。
    • 或者你能解释一下吗,确定这是用 SQLITE3 工作的,你能解释一下吗
    • 我用一个最小的示例脚本替换了答案。我希望它能让你走上正确的道路。
    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 2012-02-03
    • 2023-03-05
    • 2011-08-03
    • 2015-06-14
    • 2015-05-03
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多