• 締切済み

テーブルに入っているデータと重複チェックしたい

やりたいこと: phpを実行して取得したデータの内容と既にDBのテーブルに格納されているデータを 比較して、 異なっていれば、新しいデータとして INSERT INTO文で テーブルにデータを登録する。 同じであれば、登録しない。 という処理がしたいです。 $sql = "select * from hoge where url= $page_uri"; $kakunin = mysql_query($sql , $db ); if ( $page_uri == $kakunin ){ //同じデータならスキップ break; } else{ $sql = mysql_query("INSERT INTO hoge VALUES (0,'$page_uri','$pon')"); と書いているのですが、以下のエラーが出てしまいます。。 Fatal error: Cannot break/continue 1 level in /www/xx.php on line 42 これは、breakは使えないよ ってことでしょうか? breakでなくても やりたいことが実現できればこだわりはないのですが、、 アドバイスよろしくお願いします。

みんなの回答

回答No.3

> Fatal error: Cannot break/continue 1 level in /www/xx.php on line 42 breakは書かなくていいですよ まずはbreakを消すことから

anan19
質問者

お礼

breakいらなかったんですね、、ご指摘ありがとうございます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>これは、breakは使えないよ ってことでしょうか? RTFM. http://www.php.net/manual/ja/control-structures.break.php breakしてどこに行くのか(制御が移るのか)・・・。whileやforなどであればLoopを抜けますが、そうでなければbreakは書きません(行き先がありません)。breakの代わりにcontinueなら「おかしい」ことはわかりますよね? >$sql = "select * from hoge where url= $page_uri"; >$kakunin = mysql_query($sql , $db ); > >if ( $page_uri == $kakunin ){ mysql_queryだけで結果セットを取得するということにはなっていません。mysql_queryの戻り値はresourceです。当然そのresourceからmysql_fecth_arrayなどでレコードを取得しないといけません。 RTFM. http://php.net/manual/ja/function.mysql-query.php http://php.net/manual/ja/function.mysql-fetch-array.php なおSQL文にwhereで条件付けしているのですから、一致かどうかを確認する意味はないです。該当するレコードがあるかどうかだけで判断してかまいません。 $sql = sprintf("select * from hoge where url='%s'", mysql_real_escape_string($page_uri)); $res = mysql_query($sql); if (mysql_num_rows($res) = 0) { $sql = sprintf("INSERT INTO hoge VALUES (0,'%s','%s')" , mysql_real_escape_string($page_uri), mysql_real_escape_string($pon')); mysql_query($sql) or die('db error'); }

anan19
質問者

お礼

ご指摘ありがとうございます。記述いただいた内容で試してみます!!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

書き方に一貫性がないですね URIの項目にunique属性がついているなら、IGNOREでINSERTすれば データがあれば無視、なければ投入になります $sql = "INSERT IGNORE INTO hoge VALUES (0,'$page_uri','$pon')"); $res= mysql_query($sql); 必要に応じてmysql_real_escape_string()などでエスケープしてください

anan19
質問者

お礼

アドバイスありがとうございます。 URIの項目にunique属性をつけたいのですが、バイト数が1000を超えており エラーとなってしまうため、unique属性が付けられない状態です・・ *Specified key was too long; max key length is 1000 bytes