2012-06-14 34 views
0

我使用以下内容将公司数据插入到mysql表中。是否有可能在再次尝试重新输入之前检查公司是否已经在数据库中? php变量$company是我想要检查的。如果记录已存在,请检查mysql表

<?php 
    require("database.php"); 
    // Opens a connection to a MySQL server 
    $con = mysql_connect("localhost", $username, $password); 

    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("medicom_wp", $con); 

    $pages = get_posts(array(
     'orderby' => 'title', 
     'post_type' => 'members', 
     'numberposts' => 300, 
     'post_status' => 'any' 
     )); 
     foreach($pages as $post) { 
     setup_postdata($post); 

     $company = get_field('company_name'); 
     $address = get_field('address'); 
     $city = get_field('city'); 
     $post_code = get_field('post_code'); 

     mysql_query("INSERT INTO markers (`name`, `address`, `lat`, `lng`, `type`) VALUES ('".$company."', '".$address.", ".$city.", ".$post_code."', '0.0', '0.0', '')"); 
     } 
     wp_reset_query(); 

    mysql_close($con); 
    ?> 

回答

1

请尝试以下操作。基本上,发送另一个查询来检查具有相同公司名称的重复行,如果查询返回0行,那么只运行insert命令。

<?php 
require("database.php"); 
// Opens a connection to a MySQL server 
$con = mysql_connect("localhost", $username, $password); 

if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("medicom_wp", $con); 

$pages = get_posts(array(
    'orderby' => 'title', 
    'post_type' => 'members', 
    'numberposts' => 300, 
    'post_status' => 'any' 
    )); 
foreach($pages as $post) { 
    setup_postdata($post); 

    $company = get_field('company_name'); 
    $address = get_field('address'); 
    $city = get_field('city'); 
    $post_code = get_field('post_code'); 

    // prepare query to check for duplicate company 
    $sql = sprintf("select count('x') as cnt from markers where `name` = '%s'", mysql_real_escape_string($company)); 
    // run query 
    $row_dup = mysql_fetch_assoc(mysql_query($sql,$conn)); 
    // if no row exist 
    if ($row_dup['cnt'] == 0) { 
     // insert new company 
     // consider preparing this query using sprintf() and mysql_real_escape_string() as above 
     mysql_query("INSERT INTO markers (`name`, `address`, `lat`, `lng`, `type`) VALUES ('".$company."', '".$address.", ".$city.", ".$post_code."', '0.0', '0.0', '')"); 
    } 
} 
wp_reset_query(); 

mysql_close($con); 
?> 
1
  1. 做一个select语句,看看他们都在那里做插入之前

  2. (不推荐)使name字段(或idnentifies公司任何其他领域,独特的键,以便当您尝试再次输入被拒绝

0

自然的解决办法是运行另一个查询之前(如SELECT COUNT()),以检查是否存在标志和分公司您conditio从那里开始。

更有趣的解决方案是使用UPSERT(更新+插件)的概念。如果不存在,插入该行,如果它存在,则更新它。如此有效地最终只会有1行,不过这是假设你不介意覆盖数据。 Here's a sample SO question about that.

另一种技术是创建一个主键列并利用mysql的完整性检查来强制保留每行记录一行。因此,每个主键的第一个插入将会成功,但其他所有插入都将失败。

相关问题