【发布时间】:2014-09-05 21:00:02
【问题描述】:
我的问题是一般性问题:
教义处理
$entitity->getTest()->clear();
进入这个 sql 查询:
DELETE FROM test WHERE test_id = '6'
-> test_id 是数据库中的一个整数,mysql 会自动转换该值以便它工作。 但正确的查询是:
DELETE FROM test WHERE test_id = 6
我在这里找到了一些讨论:
stackoverflow.com/questions/21762075/mysql-automatically-cast-convert-a-string-to-a-number
code.openark.org/blog/mysql/implicit-casting-you-dont-want-to-see-around
mysql 文档说:
http://dev.mysql.com/doc/refman/5.5/en/type-conversion.html
“以下规则描述了比较操作如何进行转换”(..)在所有其他情况下,参数都作为浮点(实)数进行比较。
文档也说明了一个问题:
使用浮点数(或转换为浮点数的值)的比较是近似的,因为这样的数字是不精确的。这可能会导致结果不一致
那么,为什么学说 orm 和 dbal 也是如此呢?这不是整数表的问题吗?只有bigint?
也看这里:
http://www.cubrid.org/cubrid_implicit_type_conversion
-> 它表明这不是问题。
所以我的问题是:查询 where int_val = '1' (string) 没什么大不了的,或者这很危险。如果这很危险,那么匆忙学说是这里的设计问题吗?
【问题讨论】:
标签: php mysql casting doctrine-orm implicit-conversion