- 締切済み
テーブルに入っているデータと重複チェックしたい
やりたいこと: 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でなくても やりたいことが実現できればこだわりはないのですが、、 アドバイスよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- honoka-cha
- ベストアンサー率54% (40/73)
> Fatal error: Cannot break/continue 1 level in /www/xx.php on line 42 breakは書かなくていいですよ まずはbreakを消すことから
- shimix
- ベストアンサー率54% (865/1590)
>これは、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'); }
お礼
ご指摘ありがとうございます。記述いただいた内容で試してみます!!
- yambejp
- ベストアンサー率51% (3827/7415)
書き方に一貫性がないですね URIの項目にunique属性がついているなら、IGNOREでINSERTすれば データがあれば無視、なければ投入になります $sql = "INSERT IGNORE INTO hoge VALUES (0,'$page_uri','$pon')"); $res= mysql_query($sql); 必要に応じてmysql_real_escape_string()などでエスケープしてください
お礼
アドバイスありがとうございます。 URIの項目にunique属性をつけたいのですが、バイト数が1000を超えており エラーとなってしまうため、unique属性が付けられない状態です・・ *Specified key was too long; max key length is 1000 bytes
お礼
breakいらなかったんですね、、ご指摘ありがとうございます。