我不确定这是否合适,因为这对我来说更像是一个理解问题,但我很想知道为什么会收到这个输出:
Response id: 3 Question id: 1 Question: What is my middle name? Title: How Well Do You Know Michael
Array ( [0] => Array ( [0] => 3 [r_id] => 3 [1] => 1 [question_id] => 1 [2] => What is my middle name? [question] => What is my middle name? [3] => How Well Do You Know Michael [title] => How Well Do You Know Michael ) )
当我运行这个PHP脚本时:
// Grab the response data from the database to generate the form
$query = "SELECT qr.response_id AS r_id, qr.question_id, q.question, quiz.title " .
"FROM quiz_response AS qr " .
"INNER JOIN question AS q USING (question_id) " .
"INNER JOIN quiz USING (quiz_id) " .
"WHERE qr.user_id = '" . $_SESSION['user_id'] . "'";
$data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query");
$questions = array();
while ($row = mysqli_fetch_array($data)) {
echo 'Response id: ' . $row['r_id'] . 'Question id: ' . $row['question_id'] . ' Question: ' . $row['question'] . ' Title: ' . $row['title'] . '<br />';
array_push($questions, $row);
}
print_r($questions);
似乎每个数据都有两个条目。例如,索引[0]和[r_id]下有两个“响应ID”条目。两者都等于3. 我是否担心我的阵列中存在重复数据?我正在考虑未来我一次做10次查询以及这是否会影响速度或准确。非常感谢任何输入!
答案 0 :(得分:4)
此行为已被删除。
来自http://php.net/manual/en/mysqli-result.fetch-array.php
mysqli_fetch_array()是mysqli_fetch_row()函数的扩展版本。除了将数据存储在结果数组的数字索引中之外,mysqli_fetch_array()函数还可以使用结果集的字段名作为键将数据存储在关联索引中。
答案 1 :(得分:4)
如果您查看mysqli_fetch_array
的文档,则会看到第二个参数$result_type
,默认设置为MYSQL_BOTH
。
这意味着数字字段索引(MYSQL_NUM
)和字段名称(MYSQL_ASSOC
)都用作数组索引。因此,如果您只需要字段名称索引,则必须使用它:
while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) {
// ....
答案 2 :(得分:2)
阅读http://php.net/manual/en/function.mysql-fetch-array.php,它指出mysqli_fetch_array()
的返回值(其工作方式与mysql_fetch_array()
相同)包含数字索引的行数据以及字段名称索引行数据。如果您只想要字段名称索引数据,请使用mysqli_fetch_assoc()
。
答案 3 :(得分:2)
直接从文档中删除:
返回与获取的行对应的字符串数组,如果没有其他行,则返回FALSE。返回数组的类型取决于result_type的定义方式。通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL_ASSOC,你只获得关联索引(如mysql_fetch_assoc()工作),使用MYSQL_NUM,你只获得数字索引(因为mysql_fetch_row()工作)。
所以改变这个:
while ($row = mysqli_fetch_array($data)) {
要:
while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) {
这将仅返回字符串键,或者您可以使用mysqli_fetch_assoc