Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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 - Fatal编程技术网

PHP&;MySQL检查更新的行

PHP&;MySQL检查更新的行,php,mysql,Php,Mysql,我在检查MySQL更新语句是否成功时遇到问题。我想更新用户的电子邮件。但他们必须给自己授权一个代币。我已经使用了mysql\u受影响的\u行,但是当用户提交与以前数据库中相同的电子邮件时,受影响的行将是0而不是1。 即使新电子邮件与以前相同,我如何检查用户中是否有使用该令牌的行 UPDATE users SET email = '".$email."' WHERE token = '".$token."' 您可以使用mysql\u受影响的行。这里有记录: 例如: mysql_query("UP

我在检查MySQL更新语句是否成功时遇到问题。我想更新用户的电子邮件。但他们必须给自己授权一个代币。我已经使用了mysql\u受影响的\u行,但是当用户提交与以前数据库中相同的电子邮件时,受影响的行将是0而不是1。 即使新电子邮件与以前相同,我如何检查用户中是否有使用该令牌的行

UPDATE users SET email = '".$email."' WHERE token = '".$token."'

您可以使用
mysql\u受影响的行
。这里有记录:

例如:

mysql_query("UPDATE users SET email = '".$email."' WHERE token = '".$token."'");
echo "Rows with that token: ".mysql_affected_rows();

您可以使用
mysql\u受影响的行
。这里有记录:

例如:

mysql_query("UPDATE users SET email = '".$email."' WHERE token = '".$token."'");
echo "Rows with that token: ".mysql_affected_rows();

if(mysql\u-infected\u-rows()==1)
//成功

if(mysql\u-infected\u-rows()==1)
//成功

是否可以依赖mysql\u查询函数的返回值

比如说

if (mysql_query ("UPDATE `users`
SET `email` = '".$email."'
WHERE `token` = '".$token."';")) { // success
} else { // fail
}

可以不依赖mysql\u受影响的\u行,而是依赖mysql\u查询函数的返回值吗

比如说

if (mysql_query ("UPDATE `users`
SET `email` = '".$email."'
WHERE `token` = '".$token."';")) { // success
} else { // fail
}
mysql\u-infected\u-rows
的PHP手册中,显示了一种从调用
mysql\u-info()
中提取匹配行数的方法。不过,这真的很有意思。(编辑:mysql\u info的用户说明中有一个更一般的,但仍然很粗糙的版本。)

我要做的是使用一个单独的查询:
“选择count(token)as matches from users where token=$token”

在PHP手册中为
mysql\u受影响的行
显示了一种从调用
mysql\u info()
提取匹配行数的黑客方法。不过,这真的很有意思。(编辑:mysql\u info的用户说明中有一个更一般的,但仍然很粗糙的版本。)

我要做的是使用一个单独的查询:


“选择count(token)作为来自用户的匹配项,其中token=$token”

在我不理解您在这里试图实现的目标中进行了解释。你想让人们不能选择同一封电子邮件两次?@真相:我猜如果令牌匹配,OP希望返回一条成功消息,不管查询是否进行了实际更改。在中解释了我不理解你在这里试图实现的目标。你想让人们不能选择同一封电子邮件两次?@Truth:我的猜测是,如果令牌匹配,无论查询是否进行了实际更改,OP都希望返回一条成功消息。如果没有匹配的行,则查询仍然成功。只有在出现语法错误、未知表或列名、密钥冲突等情况下才会失败。这是真的,但并不完全清楚OP试图完成什么。如果这是一个问题,那么我认为您必须在更新查询之前尝试一个SELECT查询,并使用mysql_num_rows获取行数,以确保获得匹配行的准确图片。如果没有匹配行,则查询仍然成功。只有在出现语法错误、未知表或列名、密钥冲突等情况下才会失败。这是真的,但并不完全清楚OP试图完成什么。如果这是一个问题,那么我想您必须在更新查询之前尝试一个SELECT查询,并使用mysql_num_rows获取行数,以确保获得匹配行的准确图片。OP关注的是令牌匹配但提供的电子邮件不是新的情况。在这种情况下(OP认为成功),
mysql\u infected\u rows()
将返回0。OP关注的是令牌匹配但提供的电子邮件不是新的情况。在这种情况下(OP认为成功),
mysql\u infected\u rows()
将返回0。OP关注的是令牌匹配但提供的电子邮件不是新的情况。在这种情况下(OP认为是成功的),
mysql\u infected\u rows()
将返回0。我猜你错了。他问道:“即使新电子邮件与以前相同,我如何检查用户中是否有使用该令牌的行?”。他说“即使新的和以前一样”。如果mysql\u impacted\u rows()返回0,则没有用户拥有该令牌。这与他的要求完全相反。您链接到的手册页面上说:“当使用UPDATE时,MySQL不会更新新值与旧值相同的列。这就造成了MySQL_影响_行()的可能性实际上可能不等于匹配的行数,只等于受查询影响的行数。“仅因为
mysql\u impacted\u rows()
返回0并不意味着没有包含该标记的行。只有query.OP没有更改行才与令牌匹配但提供的电子邮件不是新的情况有关。在这种情况下(OP认为是成功的),
mysql\u infected\u rows()
将返回0。我猜你错了。他问道:“即使新电子邮件与以前相同,我如何检查用户中是否有使用该令牌的行?”。他说“即使新的和以前一样”。如果mysql\u impacted\u rows()返回0,则没有用户拥有该令牌。这与他的要求完全相反。您链接到的手册页面上说:“当使用UPDATE时,MySQL不会更新新值与旧值相同的列。这就造成了MySQL_影响_行()的可能性实际上可能不等于匹配的行数,只等于受查询影响的行数。“仅因为
mysql\u impacted\u rows()
返回0并不意味着没有包含该标记的行。只是查询没有改变行。我知道这是一个选项,但我正在搜索是否有办法做到这一点1query@user1013338当前位置我认为除了这里列出的两种方法之外,没有其他方法。您可以使用存储过程或
mysqli\u multi\u query()
在对数据库的一次调用中收集信息。我知道这是一个选项,但我正在搜索是否有方法1query@user1013338当前位置我认为除了这两种方法之外没有其他方法