-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

最初に小さな返信の質問:

{parent_id, name} の組み合わせに重複を含めることができない場合、それらが一意の制約ではないのはなぜですか???

追加すると、これらの 2 つの列で重複キーを取得することは絶対にありません。それらが唯一の列である場合、それらを一緒に主キーにすることもできます。

次は、1 つのクエリだけで十分です。

$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 制約が失敗したときに古いレコードを更新します。この方法では、2 つではなく 1 つのクエリを実行するだけで済みます。

于 2012-08-01T09:27:22.460 に答える
0

mysql_fetch_arrayFALSEこれ以上行がない場合は戻り、常にmysql_real_escape_stringまたは PDO を使用してSQL インジェクションを回避します。

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