繁体   English   中英

mysql数据检索中仅返回一行

[英]Only one row returned in mysql data retrieval

首先,对这个漫长的问题感到抱歉...但是,这正在引起我的注意。任何帮助都会被我们接受。

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

为什么要为每个呼叫打开与数据库的新连接? 这是执行查询的非常低效的方式。 我会将数据库连接作为参数传递,或者由于您正在使用mysqli,因此只需将$link作为参数传递。

至于为什么您的代码不起作用,我不知道,但是您可以尝试以下一些基本的错误报告:

$result = mysqli_query($link, $sql) or 
                 trigger_error('Query Failed: ' . mysqli_error($link));

我还将MYSQL_ASSOC添加MYSQL_ASSOC函数中,因为您没有使用基于索引的数组,因此可以使脚本效率更高。

希望这可以帮助你。

真的很糟糕(也许是侮辱性的)答案...

foreach ($injury_table as $table);
{
    echo $table['pname'];
    echo $table['name'];
    echo $table['start_date'];
    echo $table['end_date'];
    echo '<br/>'; // HTML new line
}

要么

foreach ($injury_table as $table);
{
    echo $table['pname'];
    echo $table['name'];
    echo $table['start_date'];
    echo $table['end_date'];
    echo "\n"; // Console new line
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM