【问题标题】:Mysql does not store blob column dataMysql不存储blob列数据
【发布时间】:2014-11-14 21:36:01
【问题描述】:

我有一个奇怪的问题,我无法弄清楚,任何帮助将不胜感激!。

问题是我试图将一个对象存储到 mysql 数据库中,当我执行插入命令时我运行成功,但是当我检查表时,所有列都有新插入的数据,除了 Blob 数据类型的列。

这是桌子

CREATE TABLE `uc_opportunities` (
 `post_id` int(11) NOT NULL AUTO_INCREMENT,
 `org_id` int(11) DEFAULT NULL,
 `dateTime` int(11) NOT NULL,
`subject` varchar(200) NOT NULL,
`text` varchar(2000) DEFAULT NULL,
`zipcode` varchar(10) NOT NULL,
`location` varchar(100) DEFAULT NULL,
`schedule` blob NOT NULL,
PRIMARY KEY (`post_id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8;

这里是插入函数:

public function addOpportunity($org_id)
{
    global $mysqli,$emailActivation,$websiteUrl,$db_table_prefix; // 

    echo "inside add opportunity<br>";
    var_dump($this->schedule);

    $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."opportunities (
        org_id,
        dateTime,
        subject,
        text,
        zipcode,
        schedule
        )
        VALUES (
        ?,
        ?,
        ?,
        ?,
        ?,
        ?
        )");

    $schedule_serialized = serialize($this->schedule);      
    $stmt->bind_param("iissib", $org_id, $this->dateTime, $this->subject,$this->postText, $this->zipcode, $schedule_serialized );
    $result = $stmt->execute();

    echo "execution result ".$result."<br>";
    $inserted_id = $mysqli->insert_id;
    $stmt->close();

    $this->post_id = $inserted_id;

    }

除了 schedule 之外的所有列都被插入,我检查插入函数是否使用 var_dump($this->schedule) 正确接收了计划并且它是正确的。您认为可能是什么问题?

谢谢

【问题讨论】:

  • 你查表怎么样?
  • 您并没有真正正确地使用 blob 列。 Blob 用于二进制大对象数据,通常用于图像等内容。数组/对象的序列化不是二进制数据。它是表示数组/对象的文本。您可能希望使用 text 类型的列。我不知道调度数组/对象/列中有什么,但我也敢打赌你并不是真的“做对了”,因为它可能应该拆分成自己的表以允许索引和更容易添加/编辑.
  • 看看这个。它详细介绍了如何在 mysqli 中使用 LOB 数据。 blogs.oracle.com/oswald/entry/php_s_mysqli_extension_storing。您基本上必须绑定一个空值,然后使用send_long_data 发送数据。请注意,text 类型列不需要这个额外的步骤。
  • 谢谢@JonathanKuhn,我将数据类型更改为文本,它确实有效。我使用了错误的数据类型,这让我很困惑为什么它没有存储在表中。感谢您的帮助。

标签: php mysql oop blob


【解决方案1】:

请查看有关保存 blob 数据和 max_allowed_pa​​cket 的 mysql 配置的 mysqli 文档。这可能是您的问题,因为我不知道您的序列化数据有多大:

php.net mysqli

【讨论】:

    【解决方案2】:

    首先,将图像、音频、文档等数据更改为二进制并将列调度到 longBlob,然后运行插入命令。有时由于较大的二进制数据插入不起作用。所以试一试

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2012-11-16
      • 2017-06-13
      • 2019-08-17
      • 2011-09-26
      • 2014-11-01
      相关资源
      最近更新 更多