php - mysql数据检索只返回一行

标签 php mysql row

首先,对于这个冗长的问题感到抱歉......但这让我很费脑筋。我们将不胜感激地接受任何帮助。

我编写了以下函数来从 mysql 数据库返回数据:

function injuryTable()
{
    # get all players that are injured and their injuires...
    $sql = "SELECT players.id, players.injury_id, players.pname, injuries_date.name, start_date, end_date
            FROM players INNER JOIN injuries_date
            ON injury_id = injuries_date.id";

    $result = sqlQuery($sql);

    return $result;
}

sqlQuery函数如下:

function sqlQuery($sql)
{
    $products = array();
    $link = dbConnect('localhost', 'root', '', 'umarrr');
    $result = mysqli_query($link, $sql); 

    while ($row = mysqli_fetch_array($result))
    {
        $products[] = $row;        
    }

    #   return each row:
    return $products;
    #mysqli_close($link);
}

全部连接到数据库,一切正常。 但是,当我尝试遍历结果时:它只返回一行:

$injury_table = injuryTable();

// make it more readable:
foreach ($injury_table as $table);
{
    echo $table['pname'];
    echo $table['name'];
    echo $table['start_date'];
    echo $table['end_date'];
}

我上面写的 sql 语句在 mysql 查询浏览器中完美运行,所以有人知道这里可能是什么问题吗?

print_r($injury_table)的输出

Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => 6 [injury_id] => 6 [2] => person [pname] => person [3] => wrist [name] => wrist [4] => 2008-11-21 [start_date] => 2008-11-21 [5] => 2010-11-11 [end_date] => 2010-11-11 ) [1] => Array ( [0] => 2 [id] => 2 [1] => 5 [injury_id] => 5 [2] => woman [pname] => woman [3] => neck [name] => neck [4] => 2009-11-12 [start_date] => 2009-11-12 [5] => 2010-09-09 [end_date] => 2010-09-09 ) [2] => Array ( [0] => 3 [id] => 3 [1] => 4 [injury_id] => 4 [2] => girl [pname] => girl [3] => groin [name] => groin [4] => 2010-11-27 [start_date] => 2010-11-27 [5] => 2010-12-01 [end_date] => 2010-12-01 ) [3] => Array ( [0] => 4 [id] => 4 [1] => 1 [injury_id] => 1 [2] => boy [pname] => boy [3] => achilles [name] => achilles [4] => 2010-02-01 [start_date] => 2010-02-01 [5] => 2010-03-23 [end_date] => 2010-03-23 ) [4] => Array ( [0] => 5 [id] => 5 [1] => 2 [injury_id] => 2 [2] => man [pname] => man [3] => toe [name] => toe [4] => 2010-01-01 [start_date] => 2010-01-01 [5] => 2010-02-02 [end_date] => 2010-02-02 ) )

最佳答案

一些要检查的东西:

  1. 检查 mysqli_query() 的返回值。您假设查询成功,并且有太多的原因导致查询失败而不每次都检查。它将在失败时返回 bool 值 FALSE。
  2. 如果您在脚本中执行许多查询,您将为每个查询打开一个新的连接句柄。默认情况下,这些不会是持久连接,因此您可能启动的任何事务都将在查询结果被使用后自动回滚。通常,最好一次连接到数据库(如果您愿意,可以将句柄存储在 sqlQUery() 函数内的静态变量中并重用它。在很多情况下,您d 同时想要(或需要)多个 handle ,或者每次都需要一个全新的闪闪发光的干净 handle 。
  3. 您是否尝试过对在 while() 循环中检索到的行执行 print_r()/var_dump()?尝试吐出 mysqli_num_rows() 以查看查询返回了多少 PHP 版本?
  4. 您是在浏览器中查看结果吗?也许第一或第二个结果行中的某些内容具有 HTML 标记(或您的浏览器解释的某些内容)作为 HTML 标记,并且正在“隐藏”输出。查看页面的源代码以确保它们确实没有被输出,而不仅仅是被隐藏。
  5. 最后,在安全方面,允许面向 Web 的应用程序以“root”身份连接到数据库是非常糟糕的做法。您代码中的任何缺陷都会使数据库服务器完全开放供任何人使用。创建一个具有完成工作所需的最少权限的帐户(可能仅插入/更新/选择/删除)并使用它而不是根帐户。即使您只是在私有(private)服务器上玩这个,养成这个好习惯也是一个好习惯。

关于php - mysql数据检索只返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3962998/

相关文章:

php - 如何在 Slim 3 路由中注入(inject)全局变量?

php - 当变量未硬编码时,functions.php 脚本会中断

mysql - 计算 SQL 查询中的总行数

dynamic - 如何做随机数的星星? (评分)

PHP preg_replace $1 没有空格

php - 多个sql查询运行问题

php - 在 Laravel 中获取 "Integrity constraint violation: 1452"

java - 无法使用Java在MYSQL中插入数据

php - 如何更改 WAMP 中 phpMyAdmin 中显示的语言?

python - 如何获取 CSV 文件的行数?