2

ですから、このバグは私には本当に奇妙に思えます。2つの必須引数を持つメソッドがありますが、スクリプトが最初のforループ内に入ると、2つの引数の1つが存在しなくなったようです。

コードのチャンクは次のとおりです。

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ループの後、メソッドの「return」の直前で変数を出力すると、その値は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 に答える