查询结果是否为空?

时间:2012-08-01 08:58:05

标签: php mysql

这是针对数据导入脚本,我想检查具有父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>';

3 个答案:

答案 0 :(得分:2)

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

if (empty($result_array)) {

if (mysql_num_rows($result) == 0 ) {

答案 1 :(得分:0)

如果没有更多行,

mysql_fetch_array会返回 FALSE 并始终使用mysql_real_escape_string或PDO来避免 SQL注入。< / p>

$result = mysql_query($query);
if($result)
 {
  if(($result_array = mysql_fetch_array($result)) //while
   {
    //code
   }
  }

答案 2 :(得分:0)

首先回答一个小问题:

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

如果你添加,你肯定永远不会在这两列中获得重复的密钥。如果他们只是colums你也可以把它们作为主键。

接下来,如果你已经完成了,只需一个查询即可满足

$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在UNIQUE约束或PRIMARY KEY约束失败时更新旧记录。这样,您只需运行一个查询而不是两个。