アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

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



breakは書かなくていいですよ
まずはbreakを消すことから
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/26 11:46

>これは、breakは使えないよ ってことでしょうか?



RTFM.
http://www.php.net/manual/ja/control-structures. …

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-ar …

なお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');
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/26 11:47

書き方に一貫性がないですね


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

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

必要に応じてmysql_real_escape_string()などでエスケープしてください
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/25 00:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!