gpt4 book ai didi

php - 意外的 INSERT ... SET 查询行为

转载 作者:可可西里 更新时间:2023-11-01 06:29:23 25 4
gpt4 key购买 nike

我有一个表,我需要在其中存储另一个表中的两个 ID。在进行一些调试时,我注意到 SQL 有一些奇怪的行为。

错误的sql示例:

INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4' 

上面的查询是在数据库中插入零作为值。我仔细研究了查询,意识到我错误地将 替换为 ,。我需要实现我的目的的真正查询是:

INSERT INTO table SET col1 = '3' , col2 = '4'

如我所料。我的问题与第一个(不正确的)查询有关 - 因为它执行了并且在语法上是正确的,所以像它这样的查询会在哪里使用?

最佳答案

INSERT 语句不生成语法错误并且它也能正常工作的原因是因为 MySQL 隐式地(我不喜欢的一件事MySQL :D) 将语句解析为 bool 表达式。

在您的 INSERT 语句中,只有 followerUserId 列是可更新,因为其余列都是 bool 表达式的一部分。查询被评估为:

INSERT INTO follower_list SET followerUserId = ('3' and (followingUserid='4')) 

这里:

followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid <> 4
followerUserId = ('3' and (0))
followerUserId = 0

另一个,

followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid = 4
followerUserId = ('3' and (1))
followerUserId = 1 // will only return zero if one of the values is zero

关于php - 意外的 INSERT ... SET 查询行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com