2

所以这个错误对我来说似乎很奇怪。我有一个带有两个必需参数的方法,但是当脚本进入第一个 for 循环时,两个参数之一似乎不再存在。

这是一段代码:

public function getOptionsForParameters($params, $product){
    // here the value of $product is 105
    for($i = 0; $i<count($params); $i++){
        // but here, $product no longer exists, so in the SQL query, it is empty

        $sql = "SELECT *
                FROM [table_name]
                WHERE prm_id = ".(int)$params[$i]['prm_id']."
                  AND prd_id = ".(int)$product."
                  AND opt_status = 'active'";
    } 
// ... 
}

我真的不明白为什么,因为在方法的开头和 for 循环之间绝对没有脚本。

另外,如果我在所有 for 循环之后打印变量,就在方法的“返回”之前,它的值是 105 ......在我看来,PHP 以某种方式为我的变量提供了一个范围,这很奇怪......

我已经为此苦苦挣扎了太久,在 Google 或 PHP.net 上我没有找到任何与此相关的内容

有人知道为什么我的脚本会这样做吗?

顺便说一句:我的 PHP 版本是 5.3.10

非常感谢

4

2 回答 2

1

它不应该发生。你100%确定它已经消失了吗?isset($product) 能给你什么?

下面的代码有什么作用?

public function getOptionsForParameters($params, $product){
    var_dump($product);
    for($i=0; $i<4; $i++){
        var_dump(isset($product));
    }
}

如果这仍然导致外部函数中设置了 $product 而内部循环中未设置 $product ,那么 PHP 本身就出现了一些非常错误的问题,并且可能是一些错误......

另一个注意事项:

$i<count($params);

在您的 for 循环语句中效率低下,因为它每次迭代都会执行一次 count($params) 。最好计算一次并使用该计算值

$count = count($params);
$i<$count
于 2012-08-14T13:41:43.217 回答
0

根据正常的数组声明,您是否尝试过:

WHERE prm_id = ".(int)$params['prm_id'][$i]."

因为至少根据我提出的关于数组声明语法的问题,这似乎是声明数组的正常方式?

于 2012-08-14T13:40:10.567 回答