导语:在实现一个模块功能的时候,叶子遇到的一个问题,就是使用$wpdb->insert()函数向数据库插入数据老是失败,吐血的花了一个多小时来分析这个问题,最后发现就是一个微不足道的小问题,是自己忽视了细节,现在写下来,与大家共勉。
$wpdb->insert()函数
使用$wpdb->insert()插入数据,据说是安全的的,所以叶子也就是使用了这个函数,具体语句如下。
global $wpdb; $table = "table"; $data_array = array( 'first_name' => $first_name , 'last_name' => $last_name , 'email' => $email , ); $wpdb->insert($table,$data_array);
先将要插入的数据赋给一个数组,然后传递给$wpdb->insert()函数。在插入成功后,$wpdb->insert()函数会返回为真。
遇到的问题
叶子遇到的问题时,第一条数据可以成功的插入,然后剩下的数据就插入失败了。删除表重建,然后还是会遇到。我们来看一下建表语句。
CREATE TABLE `table` ( `ID` bigint(20) UNSIGNED NOT NULL, `first_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `last_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ALTER TABLE `table` ADD PRIMARY KEY (`ID`), ADD KEY `email` (`email`);
看到这里,可能有的朋友已经知道怎么回事了。
失败的原因在`ID`上,叶子设置了它是PRIMARY KEY,然后又不能为空,那么第二条数据会与第一数据的ID相同,就会导致插入失败。解决办法就是将它设为自动增长。本来叶子的原意也是希望它是自动增长的,但忘记设置了。执行下面的语句,问题就解决了。
ALTER TABLE `table` MODIFY `ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;
结束
大家明白了吗?一个数据表的自动增长的参数忘记设置了,就导致了数据插入失败,然后浪费了一个多小时,一直在那里纠结找原因。有时候,细节很重要。