在WordPress中为什么使用$wpdb->insert()函数插入数据失败?

导语:在实现一个模块功能的时候,叶子遇到的一个问题,就是使用$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;

结束

大家明白了吗?一个数据表的自动增长的参数忘记设置了,就导致了数据插入失败,然后浪费了一个多小时,一直在那里纠结找原因。有时候,细节很重要。

发表评论

邮箱地址不会被公开。 必填项已用*标注