次のようなデータベースがあります。
Token (PRIMARY) School Skip
--------------------------------------
f2342f School 1 0
434fbc School 1 0
33332c School 1 0
私の PHP コードは、学校が一時データベースと一致する場合、各トークンにプッシュ通知を送信します。次に、skip を 1 に設定して、その日は別の通知を送信しないようにします。
問題は、スクリプトで一度に複数のスキップ値を設定できないことです。私がそうすると、最初のトークンではうまくいくように見えますが、他のトークンにはスキップ値が設定されず、死んでしまいます。
これが私のPHPです:
// Run comparison SQL query
$compare = mysql_resultTo2DAssocArray(mysql_query("SELECT Temp.School, Temp.Status, Snow.Skip, GROUP_CONCAT(Snow.Token SEPARATOR '\', \'') Tokens FROM Temp JOIN Snow USING (School) WHERE Skip = 0 GROUP BY Temp.School"), $con);
$amount = count($compare);
// Send Push Notifications
for ($i = 0; $i < $amount; $i++) {
$message = $compare[$i][School] . " - " . $compare[$i][Status];
$tokens = $compare[$i][Tokens];
pwCall( 'createMessage', array(
'application' => PW_APPLICATION,
'username' => PW_LOGIN,
'password' => PW_PASSWORD,
'notifications' => array(
array(
'send_date' => 'now',
'content' => $message,
'ios_badges' => 1,
'ios_sound' => 'bells.caf',
'data' => 'daily',
'devices' => array($tokens),
)
)
)
);
if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token='$tokens[$i]'", $con)) {
echo "<pre>";
print_r(str_replace("'", '', $tokens));
echo "</pre>";
die('Error: ' . mysql_error());
}
}
出力は次のとおりです。
f2342f、434fbc、33332c エラー: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の ''f2342f', '434' 付近で使用する正しい構文を確認してください。
したがって、コードで重要なものが欠落していない限り、スキップを再帰的に設定する必要があるようです。
$compare
:
Array
(
[0] => Array
(
[School] => School 1
[Status] => Closed
[Skip] => 0
[Tokens] => f2342f', '434fbc', '33332c
)
)