所以这个bug对我来说似乎很奇怪。我有一个带有两个必需参数的方法,但是当脚本进入第一个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以某种方式为我的变量提供了一个范围,这很奇怪..
我已经在这方面挣扎太久了,我还没有在谷歌或PHP.net上发现任何与此有关的内容
有人知道为什么我的脚本会这样做吗?
BTW:我的PHP版本是5.3.10
非常感谢
答案 0 :(得分:1)
不应该发生。你100%肯定它已经消失了吗?什么是($产品)给你的东西?
以下代码有何作用?
public function getOptionsForParameters($params, $product){
var_dump($product);
for($i=0; $i<4; $i++){
var_dump(isset($product));
}
}
如果仍然导致外部函数中的set $ product和内部循环中的unset $ product,那么PHP本身就会出现问题,这可能是一些错误......
另一方面说明:
$i<count($params);
你的for循环语句中的是低效的,因为它执行每次迭代的计数($ params)。更好地计算一次并使用该计算值
$count = count($params);
$i<$count
答案 1 :(得分:0)
根据正常的数组声明,你试过了吗?
WHERE prm_id = ".(int)$params['prm_id'][$i]."
因为它似乎是declare an array的正常方式,至少根据我提出的关于数组声明语法的问题?