2013-03-15 57 views
0

我有一个表1中的字段“年”,它定义为一个VARCHAR(255),我需要更新表2中'年份'的'num_years'。 'num_years'被定义为一个INT。PDO和MySQL类型切换

当我尝试,如果“年”被定义为3,它工作正常更新“NUM_YEARS”与“年”,但如果我定义“年”为“富”,它会更新“NUM_YEARS”以0

当我使用mysql_query函数时,它会产生一个关于无效列“foo”或类似错误的错误,但是对于PDO,当我期待它时,它不会引发异常。

在这种方式下,我们要确保“NUM_YEARS”不会更新与0,如果“年”是数字。如果是这种情况,PDO是否有内置的异常抛出异常?

我正在使用PDO事务和准备语句。

回答

2

验证如果它的字符串与否,然后再将它放入你的sql语句中,如果你从table1中的年份包含类似“1年”的内容,则可以爆炸或以其他方式剥离字符和空格并返回1 INSERT INTO表你的INT列2

而且做这种方式,你可以特殊处理的事件,如纯文本输入字段设置为0或者-1或东西在你的int字段,你可以稍后在显示屏上进行陷阱和验证,以便说出“未指定”或其他等同物。

希望是有道理的

+0

呀多数民众赞成我目前做的,我做一个简单的'抛出新的异常(“变量不是整数”)'运行'!is_numeric'和捕捉一个水平了。这是我可以提出的一个解决方案的最佳选择,但我仍然认为PDO会选择这种方式会更好。毕竟,好的旧'mysql_query'可以把它拿起来,基本上是结束了。 – 2013-03-16 01:10:15

0

而不是插入一个字符串变量PDO可以插入类似$delta = $year + 0。如果它是“富”,你得到$delta = 0,并将其添加到num_years不会改变它们。

另一种方式是当然的类型转换的,所以使用(int)$year

这应该在PHP中完成,而不是PDO。

+0

但至关重要的是,如果我使用'(int)$ year'并通过我的查询运行它,它仍然不会抛出异常la'mysql_query'时尚? – 2013-03-16 01:07:44