こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

やりたいこと:
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でなくても やりたいことが実現できればこだわりはないのですが、、
アドバイスよろしくお願いします。

投稿日時 - 2012-04-24 23:19:16

QNo.7439777

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

> Fatal error: Cannot break/continue 1 level in /www/xx.php on line 42

breakは書かなくていいですよ
まずはbreakを消すことから

投稿日時 - 2012-04-25 12:17:09

お礼

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

投稿日時 - 2012-04-26 11:46:41

ANo.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');
}

投稿日時 - 2012-04-25 09:30:17

お礼

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

投稿日時 - 2012-04-26 11:47:51

ANo.1

書き方に一貫性がないですね
URIの項目にunique属性がついているなら、IGNOREでINSERTすれば
データがあれば無視、なければ投入になります

$sql = "INSERT IGNORE INTO hoge VALUES (0,'$page_uri','$pon')");
$res= mysql_query($sql);

必要に応じてmysql_real_escape_string()などでエスケープしてください

投稿日時 - 2012-04-24 23:50:18

お礼

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

投稿日時 - 2012-04-25 00:51:08

あなたにオススメの質問