这是否足以在php中验证产品ID?

这是否足以在php中验证产品ID?,php,validation,integer,int,Php,Validation,Integer,Int,我在一家非常小的网店工作,使用codeigniter的项目数量非常有限 在脚本开始时,products模型获取整个产品列表,并将结果存储为数组作为该模型的属性 产品ID只是数据库中自动递增的主键。因此,当有人将产品添加到购物车时,ID会随POST一起发送。然后我检查三件事: $id可以是整数吗? 这个整数是否超过产品总数? 此整数是否与产品ID匹配? 基本上——虽然稍微简化了——我这样做: // Count total number of items $total = count($this-&

我在一家非常小的网店工作,使用codeigniter的项目数量非常有限

在脚本开始时,products模型获取整个产品列表,并将结果存储为数组作为该模型的属性

产品ID只是数据库中自动递增的主键。因此,当有人将产品添加到购物车时,ID会随POST一起发送。然后我检查三件事:

$id可以是整数吗?
这个整数是否超过产品总数? 此整数是否与产品ID匹配? 基本上——虽然稍微简化了——我这样做:

// Count total number of items
$total = count($this->productArray)

if (!(int)$id || $id > $total)
    return false;

foreach($this->productArray as $product) {
    if ($product['id'] == $id)
        return true;
}

return false;

您缺少了使用数据库的一个主要好处,即它非常擅长这类事情

与将所有产品加载到内存中,然后在PHP中执行自己的搜索不同,您应该使用SQL查询(如select*from products,其中id=:id)在数据库中搜索请求的产品

这并不总是正确的。一旦他们删除产品,这将失去同步


也就是说,更好的办法是将id转换为整数,并直接在DB上查询产品。不检查预加载的阵列;这毫无意义。

这个整数是否超过了产品总数这是一个糟糕的测试,因为不能保证自动递增的值是连续的。例如,如果你有1,2,4,那么你只有3个产品,但4是一个有效的id。哇!谢谢你,伙计!太傻了,我应该自己想一想。我很难决定最好的答案,因为你们两个基本上说的都是一样的。因为leftclickben的答案分为对我的问题的评论和单独的答案,所以我决定选择这一个。我不担心哪一个答案是正确的,但我把评论作为评论,答案作为答案,是因为答案是对你的实际问题的回应,关于非顺序ID值的注释更像是一个旁注,一旦您开始使用SQL,它实际上并不重要。
Does this integer exceed the total number of products?