0

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

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

4

1 回答 1

1

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

参考:

is_numeric()

htmlentites()

于 2013-01-31T01:23:29.970 回答