0

我在 PHP 中有一个二维数组,它打印数组的索引而不是值。

这是我设置数组的地方。

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不要使用双引号"使用单引号'

B.SQL循环中的重复语句不是有效的

C.\"$criteriaID[$i]\"是在 PHP 中访问数组变量的无效方式

D. 你只需要 1 个循环而不是 2 个

$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 回答