-1

这是一个数据导入脚本,我想检查具有父 ID 的类别名称是否已经存在;如果是,则不需要将其添加到数据库中。然而,我的支票并没有阻止重复的条目。

$i = 1;
$check = FALSE;
echo'<br>';
do{
   //Turn import order into Colewood order. 
   $tieroffset = $i - 1;

   $tier = $csvdata[$r][$fields["Tier" . $i]];

   $query = ("SELECT name FROM base_categories WHERE name = '".$tier."' AND id = '".$tieroffset."'");
   $result = mysql_query($query);
   $result_array = mysql_fetch_array($result);

   if (empty($result_array)) {

       if($tier != null){ 
       $queryInsert = "INSERT INTO base_categories (parent_id,name) 
                        VALUES ('" . $tieroffset . "', '" . mysql_real_escape_string($csvdata[$r][$fields["Tier" . $i]]) . "')";
       }

        mysql_query($queryInsert);

        print_r($queryInsert);
   }                

   $i++;
}while ($i <= 6 || $check != FALSE);
echo'    >>>END PRODUCT<br>';
4

3 回答 3

2

使用 mysql_num_rows 函数检查查询返回的行数。

if (empty($result_array)) {

if (mysql_num_rows($result) == 0 ) {
于 2012-08-01T09:01:39.263 回答
0

mysql_fetch_arrayFALSE如果没有更多行,则返回并始终使用mysql_real_escape_string或 PDO 来避免SQL Injection

$result = mysql_query($query);
if($result)
 {
  if(($result_array = mysql_fetch_array($result)) //while
   {
    //code
   }
  }
于 2012-08-01T09:11:53.580 回答
0

首先是一个小的回报问题:

如果您的 {parent_id, name} 组合不能包含重复项,为什么它们不是唯一约束???

如果您添加它,您肯定不会在这两列中获得重复的键。如果它们只是列,您也可以将它们作为主键。

接下来,如果您已经这样做了,只需一个查询就足够了

$query = "INSERT INTO base_categories (parent_id, name) VALUES('" . 
         $tieroffset . "', '" . 
         mysql_real_escape_string($csvdata[$r][$fields["Tier" . $i]]) . "') 
         ON DUPLICATE KEY UPDATE name = name; 

ON DUPLICATE KEY UPDATE updates your old record when an UNIQUE constraint OR PRIMARY KEY constraint fails. This way you only have to run one query in stead of two.

于 2012-08-01T09:27:22.460 回答