PHP:将Blob图像插入SQLite表

时间:2013-03-31 07:46:01

标签: php sqlite cakephp blob

我正在尝试使用(cakephp)将图像插入BLOB列中的sqlite DB。

我正在使用此代码

$insert = "INSERT INTO story (page, image) 
                    VALUES (:page, :image)";
        $stmt = $file_db->prepare($insert);

        // Bind parameters to statement variables
        $img = file_get_contents($this->request->data['image']['tmp_name']);
        $img = mysql_real_escape_string($img);
        $stmt->bindParam(':page', $this->request->data['page']);
        $stmt->bindParam(':image', $img);

           // Execute statement
          $stmt->execute();

它正在插入,但字符集不是blob数据,因为它假设是..有没有其他方法可以做到这一点,或者我的代码有什么问题?

2 个答案:

答案 0 :(得分:7)

这个 是对标题中问题的回答,因为它在[php sqlite blob]中排名第一。这不使用PDO,因为我遇到了麻烦。你必须使用预准备语句,你通常不能执行文字SQL插入,因为blob的大小太大。这是一个更新而不是插入,但它基本相同。

// example variables
$row_id=1;
$image_filename="/home/mywebsite/public_html/images/an_image.png";
$sqlite_table_name="user_images";
$database_filename="database.sqlite";
// the blob field in the sqlite table is called ZIMAGE and the id field is ZID.

// Code
if (file_exists($image_filename)) {
$db = new SQLite3($database_filename);
$query = $db->prepare("UPDATE '{$sqlite_table_name}' SET ZIMAGE=? WHERE ZID=?");
$image=file_get_contents($image_filename);
$query->bindValue(1, $image, SQLITE3_BLOB);
$query->bindValue(2, $row_id, SQLITE3_TEXT);
$run=$query->execute();
}

我不认为编程中有任何硬性规则,我在某些情况下将图像存储在Sqlite中的blob中。我还用正则表达式而不是Xpath来抓取网页!无论做什么都可以完成。

答案 1 :(得分:3)

这不是一个答案,但在这个问题中存在“不明确”,将其作为评论的时间太长

  1. 你提到CakePHP,但你的问题中没有CakePHP
  2. 你提到'SQLite',但是你正在使用mysql_real_escape?
  3. 请说明您打算使用哪个数据库。

    关于MySQL并在数据库中存储图像;

    • PHP中的mysql_函数已弃用不再维护
    • 尝试确定确实是否需要将图像数据 存储在数据库中,通常情况下,最好将图像存储在文件系统和数据库中图像的名称

    阅读此问题以获得有关在mysql中插入图像的答案:

    Insert Blobs in MySql databases with php

    阅读此问题以获得有关在SQLite中插入图像的答案(使用PDO):

    Remote image file to sqlite blob in PHP?

    以下是针对BLOB的通用PDO逐步演练;

    http://www.phpeveryday.com/articles/PDO-Working-With-BLOBs-P554.html