$wpdb->插入重复项

时间:2013-09-25 作者:MosesA

我收到了重复的条目,请问我如何修复它?

<?php

echo "Month". $_POST["Month"];

global $wpdb;
$wpdb->show_errors(); 
$wpdb->print_error(); 

$wpdb->insert( 
    \'church\', 
    array( 
        \'Firstname\' => $_POST["Firstname"],
        \'Surname\' => $_POST["Surname"],
    \'Month\' => $_POST["Month"],
    \'Day\' => $_POST["Day"],
    \'Email Address\' => $_POST["Email"],
    \'Mobile Number\' => $_POST["Number"]
)
);
?>

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

这里没有什么可以防止重复。

创建表时\'church\' 一个好主意UNIQUE 字段电子邮件的sql索引,这样您就可以依靠电子邮件地址来防止重复条目。

作为一种通用的PHP良好实践,您应该在使用变量之前检查它的存在,使用isset 功能:

/* If $_POST[\'email\'] is setted and it is a valid email address */
if ( isset($_POST[\'email\']) && filter_var($_POST[\'email\'], FILTER_VALIDATE_EMAIL) ) {

  global $wpdb;
  $exists = $wpdb->get_var( $wpdb->prepare(
    "SELECT COUNT(*) FROM \'church\' WHERE email = %s", $_POST[\'email\']
  ) );

  if ( ! $exists ) {
    /* Your insert code here */
  }

}
另一个好主意是在自定义表名称之前预先添加WordPress表前缀。

SO网友:HeroWeb512
global $wpdb;
$table_user = $wpdb->prefix . \'user\';
$email = $_POST[\'email\'];
// first check if data exists with select query
$datum = $wpdb->get_results("SELECT * FROM $table_user WHERE email= \'".$email."\'");
if($wpdb->num_rows > 0) {
echo "result exists";
}
// if not exist in the database then insert it
else{
$result = $wpdb->insert( 
 $table_token, 
 array( 
    \'Firstname\' => $_POST["Firstname"],
    \'Surname\' => $_POST["Surname"],
\'Month\' => $_POST["Month"],
\'Day\' => $_POST["Day"],
\'Email Address\' => $_POST["Email"],
\'Mobile Number\' => $_POST["Number"]
 )
 );
}
结束