我有一个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());
}
问题是,如果两个令牌共享同一所学校,那么它将不会更新。当阵列中有多个“令牌”时,它是否可以更新?因此,对于该查询,不仅要更新单个令牌,还要用逗号分隔多个令牌:
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
答案 0 :(得分:2)
是的,你应该用引号括起所有标记,这样你就会得到'434fbc','33332c':
$tokensStr = "'" . join("','", explode(",", $tokens)) . "'";
if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token IN($tokensStr)", $con)) {
die('Error: ' . mysql_error());
}
如果$令牌直接来自用户输入:
$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
答案 1 :(得分:0)
逗号在IN中分隔您的值。
即
UPDATE Snow SET Skip='1' WHERE Token IN('434fbc', '33332c')