此代码在phpMyAdmin中有效,但在PHP语法中不起作用

时间:2014-09-05 06:29:22

标签: php mysql phpmyadmin

我有一个看起来像这样的表:

The Database

所以我想从特定的表中获取一列中的所有值。 我这样做了:

$syntax = 'SELECT Ubah FROM dua WHERE Ubah IS NOT NULL';
$naik = mysqli_query($this->con, $syntax);
$row = mysqli_fetch_array($naik);
echo count($row).'<br>';

但回声不起作用,它显示2.当我做了var_dump时,它也只显示了两个数组值。

奇怪的是代码SELECT Ubah FROM dua WHERE Ubah IS NOT NULL在phpMyAdmin中完美运行。 那我现在想念的是什么?

修改 所以基本上我想要回显一些特定的数组值(5个最高值):

function Kelompok($a=1) {
    $syntax = 'SELECT Ubah FROM dua WHERE Ubah IS NOT NULL';
    $syntax2 = 'SELECT Jenis FROM dua WHERE Jenis IS NOT NULL';
    $naik = mysqli_query($this->con, $syntax);
    $row = mysqli_fetch_array($naik);
    $naik2 = mysqli_query($this->con, $syntax2);
    $row2 = mysqli_fetch_array($naik2);
    array_multisort($row, SORT_ASC, SORT_REGULAR, $row2);
    //echo count($row2) . '<br>';
    echo $row2[$a].' sebesar '.$row[$a];
}

我将使用此功能调用该功能:Kelompok (0);Kelompok(1);,... Kelompok(4);

由于它从一开始就不起作用,我尝试使用var_dump,count和stuff。

3 个答案:

答案 0 :(得分:5)

mysqli_fetch_array一次只返回一条记录。

你必须使用循环:

$syntax = 'SELECT Ubah FROM dua WHERE Ubah IS NOT NULL';
$naik = mysqli_query($this->con, $syntax);
while ($row = mysqli_fetch_array($naik)) {
  var_dump($row);
}

如果您只需要计数,则可以使用COUNT(*)

$syntax = 'SELECT COUNT(*) FROM dua WHERE Ubah IS NOT NULL';
$naik = mysqli_query($this->con, $syntax);
$result = mysqli_fetch_array($naik);
var_dump($result);

答案 1 :(得分:0)

<强>解决:


原来我只需要修改fetch_array的东西:

function Kelompok($a = 1) {
    $syntax = 'SELECT Ubah FROM dua WHERE Ubah IS NOT NULL';
    $syntax2 = 'SELECT Jenis FROM dua WHERE Jenis IS NOT NULL';
    $naik = mysqli_query($this->con, $syntax);
    $row = array();
    while ($r = mysqli_fetch_array($naik)) {
        array_push($row, $r['Ubah']);
    };
    $naik2 = mysqli_query($this->con, $syntax2);
    $row2 = array();
    while ($r = mysqli_fetch_array($naik2)) {
        array_push($row2, $r['Jenis']);
    };
    array_multisort($row, SORT_DESC, SORT_REGULAR, $row2);
    echo $row2[$a] . ' sebesar ' . $row[$a];
}

现在完美运作。感谢xdazz的输入。 (y)的

答案 2 :(得分:0)

每次调用Kelompok()函数时,都会执行两个 new 数据库查询,并从两个查询中检索第一个结果。您需要在循环中调用mysqli_fetch_array()以检索超过结果第一行的内容。根据我的理解,对您的问题的最佳解决方案是在单个查询中获取两个列,并让数据库引擎进行排序。

<?php

  /* I love HEREDOC syntax. */
  $q = <<<_
  SELECT  Ubah, Jenis
    FROM  dua
   WHERE  Ubah IS NOT NULL
ORDER BY  Ubah, Jenis
_;

  $rows = array();
  $naik = mysqli_query($this->con, $q);
  if ($naik) {
    while ($r = mysqli_fetch_array($naik))
      $rows[] = $r;
    mysqli_free_result ($naik); /* Always free your resources. */
  } else {
    /* Error: Query failed. */
  }

  foreach ($rows as $r) {
    echo $r['Jenis'] , ' sebestar ' , $r['Ubah'], "\n";
      /* OR */
    echo $r[1] , ' sebestar ' , $r[0], "\n";
  }

默认情况下,mysqli_fetch_array()函数使用两个数字索引(0 => ..., 1 => ...)和关联索引('Jenis' => ..., 'Ubah' => ...)返回行。如果您只想要关联索引,则可以改为调用mysqli_fetch_assoc()。如果您对数字索引感到满意,可以拨打mysqli_fetch_row()