【发布时间】: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,我将数据类型更改为文本,它确实有效。我使用了错误的数据类型,这让我很困惑为什么它没有存储在表中。感谢您的帮助。