ash*_*nix 9 php mysql sql sql-insert
我有一个表,我需要从另一个表存储两个id.在做一些调试时我发现了一些奇怪的SQL行为.
错误的sql示例:
INSERT INTO follower_list set `followerUserId` = '3' AND `followingUserid` = '4'
Run Code Online (Sandbox Code Playgroud)
上面的查询是在数据库中插入零作为值.我仔细研究了这个问题,发现我犯了一个and代替的错误,.我需要实现的目的是:
INSERT INTO table SET col1 = '3' , col2 = '4'
Run Code Online (Sandbox Code Playgroud)
这符合我的预期.我的问题与第一个(不正确的)查询有关 - 因为它执行并且在语法上是正确的,在哪里使用它的查询?
Joh*_*Woo 11
INSERT语句之所以没有生成语法错误并且它也有效的原因是因为MySQL隐式(我在MySQL中不喜欢的一件事:D)将语句解析为布尔表达式.
在您的INSERT语句中,只有followerUserId列是可更新的,因为其余的是布尔表达式的一部分.该查询被评估为:
INSERT INTO follower_list SET followerUserId = ('3' and (followingUserid='4'))
Run Code Online (Sandbox Code Playgroud)
这里:
followerUserId = ('3' and (followingUserid='4')) // assuming followingUserid <> 4
followerUserId = ('3' and (0))
followerUserId = 0
Run Code Online (Sandbox Code Playgroud)
另一个,
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
Run Code Online (Sandbox Code Playgroud)