0

mysql 行が存在するかどうかを確認する必要があるスクリプトがあります。もしそうなら、それに基づいて行動しなければなりません。そうでない場合は、別のことをしなければなりません..存在する場合は正常に動作しますが、存在しない場合は、私のajaxにエラーを返します:

Unknown column '100005075040249' in 'field list'

100005075040249」は以下の $friend の値です

ここに私のphpコードがあります:

$connection = mysql_connect("$host", "$username", "$password") or die(mysql_error()); 

$sql_result = mysql_query("SELECT `FB_ID` FROM `lavender`.`Players` WHERE FB_ID =  `$friend`");

if(is_resource($sql_result) && mysql_num_rows($sql_result) > 0 ){
    $rec = mysql_query("SELECT Recieved FROM `lavender`.`Players` WHERE FB_ID = `$friend`");
    $rec = $rec['Recieved'];
    if($rec == 0){
        mysql_query("UPDATE `lavender`.`Players` SET `count` = `count`+1, `total` = `total`+1, `Recieved` = 1 WHERE FB_ID= `$friend`");
    };

    echo "inserted into old row";
}else{
    mysql_query("INSERT INTO `lavender`.`Players` (`FB_ID`, `count`, `total`, `Recieved`) VALUES (`$friend`, `1`, `1`, `1`);") or die(mysql_error());

    echo "made new row";
};

行がゼロより上かどうかを確認するだけで試してみましたが、同じエラーが返されます。

4

2 に答える 2

1

コードのどこが間違っているかに関係なく (使用

'$friend'

いいえ

`$friend`

同様に1、 とfetch実際の行についても...) FB_ID に UNIQUE インデックスがあれば、これを 1 つのクエリで実行できます。これにより、競合状態も回避されます。

INSERT INTO `lavender`.`Players` 
  (`FB_ID`, `count`, `total`, `Recieved`) 
  VALUES 
  ('$friend', 1, 1, 1)
ON DUPLICATE KEY UPDATE
  `count` = IF(received, `count`,`count`+1),
  `total` = IF(received, `total`,`total`+1),
  received = 1;
于 2013-05-08T15:22:53.387 に答える