如果我有一个MySQL查询,如:一次讲话商标查询
SELECT this FROM that WHERE id='10'
和
SELECT this FROM that WHERE id=10
似乎都正常工作。
什么是在MySQL查询中使用单一的语音标记?什么时候使用它们是正确的?
如果我有一个MySQL查询,如:一次讲话商标查询
SELECT this FROM that WHERE id='10'
和
SELECT this FROM that WHERE id=10
似乎都正常工作。
什么是在MySQL查询中使用单一的语音标记?什么时候使用它们是正确的?
如果该值是一个字符串,你必须使用'
或"
。
如果该值是一个数字,就像在你的榜样,你还没有使用'
,但MySQL的处理它,如果你把它挂'
秒。
你应该总是使用它们。他们可以帮助阻止SQL injection攻击,因为mysql_real_escape_string
是不够的。
这是假设你通过PHP运行查询。
哎呦......这应该是一条评论... –
假设id
是数字列,什么情况是,MySQL的自动转换您的参数号码,数据类型比较之前匹配。它完美地工作,除非铸造提供意想不到的结果。例如,这些表达与匹配ID行= 10,因为所有的字符串转换为:
id='10'
id=' 10'
id='00010'
id='10foo'
下不会行,因为非可解析字符串转换为和10 <匹配> 0:
id='foo10'
id='bar'
什么时候使用?如果你想要一个字符串,你需要需要引用它(没有其他的方式来键入一个字符串,并获得有效的SQL)。如果你想要一个数字,它必须不加引号(否则,你会得到一个恰好包含数字的字符串)。当然,您始终可以将数字作为字符串提供,并让MySQL执行转换,但除了一个额外的步骤以外,它不会真正为查询添加任何内容,并且可能会导致不被注意的错误结果。
当MySQL执行查询,存在参数的隐式转换。 如果id是INT,则将'10'转换为整数。 如果id是VARCHAR或其他文本类型,则将10转换为字符串。 在这两种情况下,这两个查询都可以工作(除非您在STRICT模式下运行)。
从性能的角度来看,你必须使用正确的数据类型(不使用整数参数报价) - 的隐式转换的开销增加,并且某些情况下,可能会伤害索引查询的性能。
从安全的角度来看,它更容易总是使用引号和参数没有加引号mysql_real_escape_string(万一,mysql_real_escape_string不会停止任何攻击,不使用引号,例如“UNION SELECT password
FROM users
”。但是,更好的方法是将您的变量强制转换为int,或者使用prepared statements
+1方式比接受的答案更丰富:) –
[如何在mysql插入语句中包含PHP变量](http:// stackoverflow。com/questions/7537377/how-to-include-a-php-variable-inside-a-mysql-insert-statement) –
顺便说一句,它们通常被称为*单引号*。 –
@ Col.Shrapnel:这不是重复的。这只是一个关于MySQL语法的问题;它与PHP界面无关。 –