0

特定のデバイストークンにプッシュ通知を送信するPHPスクリプトがあり、送信後、その行と一致する列に変数を設定して、スクリプトが次に通知を送信するときにその変数をスキップするようにします。

テーブルは次のようになります。

Token (PRIMARY)     School        Skip
--------------------------------------
f2342f              School 2      0
434fbc              School 1      0
33332c              School 1      0

Skip通知を送信するコードを実行した後、列変数を1に設定しました。

if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token IN('$tokens')", $con)) {
    die('Error: ' . mysql_error());
}

ただし、2つのトークンが同じ学校を共有している場合、更新されないという問題があります。アレイに複数の「トークン」がある場合に更新することは可能ですか?したがって、そのクエリで単一のトークンだけでなく、コンマで区切られた複数のトークンを更新するには、次のようにします。

UPDATE Snow SET Skip='1' WHERE Token IN('f2342f') // Single tokens matching criteria
UPDATE Snow SET Skip='1' WHERE Token IN('434fbc, 33332c') // Multiple tokens
4

2 に答える 2

2

はい、すべてのトークンを引用符で囲んで、「434fbc」、「33332c」を取得する必要があります。

$tokensStr = "'" . join("','", explode(",", $tokens)) . "'";
if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token IN($tokensStr)", $con)) {
    die('Error: ' . mysql_error());
}

また、$ tokensがユーザー入力から直接取得される場合:

$tokenArray = explode(",", $tokens));
$tokenArray = array_map('mysql_real_escape_string', $tokenArray);
$tokensStr = "'" . join("','", $tokenArray) . "'";
if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token IN($tokensStr)", $con)) {
    die('Error: ' . mysql_error());
}

これにより、SQLインジェクションが防止されます:http://en.wikipedia.org/wiki/SQL_injection

于 2012-11-21T21:26:12.657 に答える
0

IN内で値をコンマ区切りします。

すなわち

UPDATE Snow SET Skip='1' WHERE Token IN('434fbc', '33332c') 
于 2012-11-21T21:24:10.310 に答える