2012-03-31 15 views
0

私のスクリプトであなたの助けが必要です。 maintableに値を挿入しようとしていますが、挿入する前に、挿入している行と完全に一致する行があるかどうかを確認する必要があります。一致するものがある場合はecho Record Existsでなければならず、そうでなければテーブルに挿入してください。問題は$duplicate0を返していることです。実際にはHTMLページに入力したエントリと一致する行が存在するため、それが先に進み、複製が挿入されます。 問題は何ができますか?Mysqlの重複行のエントリ

{ 
    $query = mysql_query("SELECT m.matric_no, m.course_code, m semester_name, m.level, m.session 
          FROM maintable AS m 
          WHERE m.matric_no = '".$matric_no."' 
          AND m.course_code = '".$course_code."' 
          AND m.semester_name = '". $semester_name."' 
          AND m.level = '".$level."' 
          AND m.session = '".$session."'") ; 

    $duplicate = mysql_num_rows($query); 

    if ($duplicate > 0) 
     echo "$duplicate" ; 
    { 
     echo "Record Exists"  
    } 
    else 
    { 

     $query = "INSERT INTO maintable (matric_no, course_code, semester_nam,   session, level) 
        VALUES ('".$matric_no."', 
         '".$course_code."', 
         '".$semester_name."', 
         '".$session."', 
         '".$level."')" ; 
     mysql_query($query) or 
      die (mysql_error()); 

     echo"Record Inserted"; 
    } 

私の書式設定を許してください、私はこのコミュニティへの無礼を意味するものではありませんでした、モバイル上でタイプされました。

+0

元のコードの '' echo "$ duplicate"文の前に '{'はありますか?元のコードをここに貼り付けることができない場合は、ほとんど手助けができないことに注意してください。 – jeroen

+0

@jeroenはい - これはエラーの原因IMO – hohner

答えて

1

あなたの書式設定はちょっとあります。そのため、エラーが発生したときにそれを見つけ出すことが非常に難しいと感じています。一貫したフォーマットスタイルに固執してみてください。あなたはあなたのクエリに一致するレコードが見つからなかった場合0を返すことが行を数えている

$check = mysql_query("SELECT * FROM maintable WHERE matric_no = '$matric_no' AND course_code = '$course_code' AND m.semester_name = '$semester_name' AND m.level = '$level' AND m.session = '$session'"); 

if(mysql_num_rows($check)) 
{ 
    echo 'Record exists!'; 
} 
else 
{ 
    $query = "INSERT INTO maintable (matric_no, course_code, semester_nam, session, level) VALUES ('$matric_no','$course_code','$semester_name','$session','$level')"; 
    mysql_query($query) or die (mysql_error()); 
} 
+0

ありがとうJamie、それは実際にトリックをしましたが、私のクエリi(と前のもの)では、私は通常、私がチェックするのに十分だと思うカラムを選びます重複していて、これまでにはうまくいきました。どうしてこのことがうまくいかなかったのでしょうか?答えをありがとう。それは上にあった。 –

0

:これはトリックを行う必要があります。コードブロック

if ($duplicate > 0) 
    echo "$duplicate" ; 
{ 
    echo "Record Exists"  
} 

if ($duplicate > 0)   
{ 
    echo "$duplicate" ; 
    echo "Record Exists"  
} 

する必要があるかどうかを混合しているしかし、私はあなたのコードをチェックして、それが有効なようです。それを簡略化してみてください

$result = mysql_query("SELECT * FROM maintable WHERE matric_no = '$matric_no' AND course_code = '$course_code' AND m.semester_name = '$semester_name' AND m.level = '$level' AND m.session = '$session'"); 

if(!mysql_num_rows($result)) 
{ 
    $query = "INSERT INTO maintable (matric_no, course_code, semester_nam, session, level) VALUES ('$matric_no','$course_code','$semester_name','$session','$level')"; 
    mysql_query($query) or die (mysql_error()); 
} 
+0

ありがとうStarx ... $重複は、返された行の数をエコーし​​て、クエリが処理されたことを確認するだけでした。しかし、実際の問題は、あなたが 'SELECT *'を使用していたという事実でした。これは他のスクリプトでこのように私のために働いています。それはなぜここで働かなかったのですか? 答えをありがとう、私はそれを高く評価します。 –

+0

@ dotman14、問題はすべての列を選択していないか、またはいくつかを選択していません。この問題はおそらくmysql_error()が 'mysql_num_rows()> 0 'によってトラップされなかったため発生しました。だから私はブール代数式を使用して、答えのために – Starx

+0

を感謝しました。実際に私はあなたが提供した答えから 'SELECT *'を行い、if($ duplicates> 0)を使用して、同じ結果を得ました。 mysql_now_rows()> 0がmysql_error()によってトラップされないようにする可能性があります。 ご協力ありがとうございます –