而Loop只返回9000+条记录中的一行

时间:2016-01-20 03:11:19

标签: php mysqli datatables

我有一个在PHP 5.3中运行良好的脚本。新主机只支持5.5,所以我做了一些修改。到目前为止,我只能获得一行返回。我已经痛苦了几个小时,我只是不明白为什么。

这可能是因为我在while循环后没有使用array_push()吗?在我的原始脚本中我得到了它,但发现了这个,我得到了500内部服务器错误,如果我把它取出就消失了。

<?php
$mysqli = mysqli_connect("localhost", "user", "password", "database");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$row_array = array();

$query = "SELECT title,year,author,journal,keywords,abstract,url FROM entries";

if ($result = mysqli_query($mysqli, $query)) {

/* fetch object array */
   while ($row = mysqli_fetch_assoc($result)) {
        $row_array['title'] = $row['title'];
        $row_array['year'] = $row['year'];
        $row_array['author'] = $row['author'];
        $row_array['journal'] = $row['journal'];
        $row_array['keywords'] = $row['keywords'];
        $row_array['abstract'] = $row['abstract'];
        $row_array['url'] = $row['url'];

    }

    echo '{"data":';
    echo json_encode($row_array);
    echo '}';

    /* free result set */
    $result->close();
}

/* close connection */
$mysqli->close();
?>

返回的是:

  

{&#34;数据&#34;:{&#34;标题&#34;:&#34; ERGOT属Clavisps&#34;,&#34;年&#34;:&#34; 1999&# 34;&#34;笔者&#34;:无效,&#34;中国&#34;:无效,&#34;关键字&#34;:&#34; LSD&#34;&#34;抽象&#34 ;:空,&#34; URL&#34;:空}}

哪个好,花花公子,除了大约9500个其他行应该带回来。

4 个答案:

答案 0 :(得分:1)

if

答案 1 :(得分:1)

你需要有一个多维数组并且你已经采用了一维数组。

因此,每次记录到来时,它都会覆盖旧记录。

因此,您只能获得最后一条记录。

将您的代码修改为:

$i=0;
$row_array = array();
while ($row = mysqli_fetch_assoc($result)) {
  $row_array[$i]['title'] = $row['title'];
  $row_array[$i]['year'] = $row['year'];
  $row_array[$i]['author'] = $row['author'];
  $row_array[$i]['journal'] = $row['journal'];
  $row_array[$i]['keywords'] = $row['keywords'];
  $row_array[$i]['abstract'] = $row['abstract'];
  $row_array[$i]['url'] = $row['url'];
  ++$i;
}

答案 2 :(得分:0)

你的$row_array每次都会替换,你会得到最后一个。将您的代码更改为:

$i = 0;
while ($row = mysqli_fetch_assoc($result)) {
    $row_array[$i]['title'] = $row['title'];
    $row_array[$i]['year'] = $row['year'];
    $row_array[$i]['author'] = $row['author'];
    $row_array[$i]['journal'] = $row['journal'];
    $row_array[$i]['keywords'] = $row['keywords'];
    $row_array[$i]['abstract'] = $row['abstract'];
    $row_array[$i]['url'] = $row['url'];
    $i++;
}

echo '{"data":';
    echo json_encode($row_array);
    echo '}';

答案 3 :(得分:0)

你的while循环不断覆盖$ row_array数组中相同的数组元素。

要做你想做的事:     while($ row = mysqli_fetch_assoc($ result)){         $ row_array [] = $ row;     }