0

PHPには、値の代わりに配列のインデックスを出力する2次元配列があります。

ここでアレイを設定します。

for($i = 1;$i <= $numOfCriteria;$i++)
            {
                for($j = 1;$j <= $numOfScores;$j++)
                {
                    $description[$i][$j] = mysql_real_escape_string($_POST['descriptionPosition'.$i.$j]);
                }
            }

これがSQLクエリです。

for($i = 1;$i <= $numOfCriteria;$i++)
            {
                for($j = 1;$j <= $numOfScores;$j++)
                {
                    $this->Instructor->query("INSERT INTO Criteria_Description (description,CriteriaID,ScoreID) VALUES (\"$description[$i][$j]\",\"$criteriaID[$i]\", \"$scoreID[$j]\")");
                }
            }

これはそれがデータベースに置くものです。

            Array[1]        
            Array[2]        
            Array[1]        
            Array[2]        

事前の返信ありがとうございます。

4

3 に答える 3

2

これは、PHPのパーサーが文字列内の複数の配列インデックスを正しく認識しないためです。

これを試してみると:

<?php
$foo = array(array(array("bar")));
echo "wrong: \"$foo[0][0][0]\"" . PHP_EOL;
echo "right: \"{$foo[0][0][0]}\"" . PHP_EOL;

あなたは気付くでしょう:

wrong: "Array[0][0]"
right: "bar"

これを修正するには、上記のように、"{$var}"構文を使用します。変数式を中括弧で囲むと、パーサーがそれを正しく処理できるようになります。

$this->Instructor->query("INSERT INTO Criteria_Description (description,CriteriaID,ScoreID) VALUES (\"{$description[$i][$j]}\",\"{$criteriaID[$i]}\", \"{$scoreID[$j]}\")");
于 2012-04-27T07:48:20.387 に答える
0
for($i = 1;$i <= $numOfCriteria;$i++)
            {
                for($j = 1;$j <= $numOfScores;$j++)
                {
                    $this->Instructor->query("INSERT INTO Criteria_Description (description,CriteriaID,ScoreID) VALUES ('".$description[$i][$j]."','".$criteriaID[$i]."', '".$scoreID[$j]."')");
                }
            }

文字列で配列をインラインで使用することはできません。文字列、数値などでの​​み機能します。

オブジェクトと配列の場合は、分割する必要があります。

読みやすくするために、\"の代わりに'を使用しました

よろしく、ステファン

于 2012-04-27T07:51:58.613 に答える
0

"A.SQLに二重引用符を使用しないでください一重引用符を使用してください'

SQLB.ループ内の効率的な複製ステートメントではありません

C.\"$criteriaID[$i]\"はPHPで配列変数にアクセスするための無効な方法です

D.必要なループは2つではなく1つだけです

$sql = "INSERT INTO Criteria_Description (description,CriteriaID,ScoreID) VALUES ('%d','%s', '%d')";
for($i = 1; $i <= $numOfCriteria; $i ++) {
    for($j = 1; $j <= $numOfScores; $j ++) {
        $this->Instructor->query ( sprintf ( $sql, mysql_real_escape_string ( $_POST ['descriptionPosition' . $i . $j] ), $criteriaID [$i], $scoreID [$j] ) );

    }
}
于 2012-04-27T08:03:11.653 に答える