如何检查PHP模型的有效ID?

时间:2013-01-31 01:09:44

标签: php database-design model

我在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的整数,以及有效正整数的字符串。

我更喜欢时间成本非常低的东西。这就是我没有使用正则表达式进行验证的原因。这些调用将在应用程序的任何地方使用,我无法负担开销。

1 个答案:

答案 0 :(得分:1)

我无法理解为什么你只是为了验证你的输入而经历了这么多麻烦。只需使用php函数 is_numeric() htmlentities()检查输入,然后再将其传递给SQL逻辑。此外,当执行针对它的SQL时,无效的数字ID(数据库中不存在)将返回 null 输出,这应该不是问题。

参考文献:

is_numeric()

htmlentites()