我在MySQL中有数据库表,其主键定义如下:
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`id`)
我已经为表创建了模型。我正在使用Zend Framework v1,没有ORM,但这个问题应该适用于所有模型实现。
现在我想创建一个允许我按id
抓取的功能:
public static function getById ($id) {
$id = intval($id);
if ($id < 1) {
throw new Exception('bad id');
}
// business logic and stuff
return $stuff;
}
这种方法的原因是双重的。首先,表单输入(包括数字)通常从视图中读取为字符串。其次,无效字符串(例如'asdf'
)在转换后将变为零,从而导致异常触发。但是,有许多无效字符串仍可能绕过检查:
echo intval('1asdf');
输出:
1
我尝试的其他方法包括:
if (intval($id) === 0)
if ($id == intval($id))
验证模型中id的最佳方法是什么?我希望它接受大于0的整数,以及有效正整数的字符串。
我更喜欢时间成本非常低的东西。这就是我没有使用正则表达式进行验证的原因。这些调用将在应用程序的任何地方使用,我无法负担开销。
答案 0 :(得分:1)
我无法理解为什么你只是为了验证你的输入而经历了这么多麻烦。只需使用php函数 is_numeric()和 htmlentities()检查输入,然后再将其传递给SQL逻辑。此外,当执行针对它的SQL时,无效的数字ID(数据库中不存在)将返回 null 输出,这应该不是问题。
参考文献: