Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果MySQL行包含数组中的变量,是否更新该行?_Php_Mysql_Arrays - Fatal编程技术网

Php 如果MySQL行包含数组中的变量,是否更新该行?

Php 如果MySQL行包含数组中的变量,是否更新该行?,php,mysql,arrays,Php,Mysql,Arrays,我有一个PHP脚本,它向某些设备令牌发送推送通知,在发送后,在与该行匹配的列中设置一个变量,以便脚本在下次发送通知时跳过它 该表如下所示: Token (PRIMARY) School Skip -------------------------------------- f2342f School 2 0 434fbc School 1 0 33332c School 1

我有一个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

在中用逗号分隔值


是的,您应该将所有代币用引号括起来,这样您将得到'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注入:

$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());
}