【问题标题】:Returning more than one result mysql & php返回多个结果 mysql & php
【发布时间】:2012-07-26 19:08:49
【问题描述】:

您好,基本上我正在尝试返回 category_name 表中的 3 个值。 然而这被证明是不可能的......当我做 var dump 我得到array(2) { [0]=> string(3) "one" ["category_name"]=> string(3) "one" } 我不知道我做错了什么

$connection = mysql_connect("localhost","admin","");
mysql_select_db("test",$connection);
$result = mysql_query("SELECT category_name FROM category ");
$result2 = mysql_fetch_array ($result);
var_dump ($result2)

【问题讨论】:

  • 再次检查以确保类别表有 3 行数据。这段代码应该可以工作。
  • 请不要将mysql_* 函数用于新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果您不能决定,this article 将帮助您选择。如果你想学习,here is good PDO tutorial.
  • 所以你只执行 mysql_fetch_array() 一次,所以它只会获取一个结果....现在你知道你需要继续调用 mysql_fetch_array() 来获取每个返回的行,向上移动MySQLi 或 PDO
  • 自己手动插入并在 SQL 控制台中运行 select 语句,它返回 3 :S

标签: php mysql


【解决方案1】:

您需要一个循环,因为 mysql_fetch_array() 一次只会获取 一个 行:

$cats = array();
while( $row = mysql_fetch_array ($result)) {
    $cats[] = $row;
}

var_dump( $cats); // This will have all three categories in it

上述循环mysql_fetch_array()直到没有数据为止,将从DB返回的行添加到$cats数组中。

【讨论】:

  • 尼克,我这样做了,我得到了array(2) { [0]=> array(2) { [0]=> string(3) "dos" ["category_name"]=> string(3) "dos" } [1]=> array(2) { [0]=> string(4) "tres" ["category_name"]=> string(4) "tres" } },但我仍然缺少 1 个结果
  • @Jonathan - 你确定你完全复制了我的帖子吗?如果是这样,看起来你在表中有两行,没有别的。确保在此循环之前不要调用 mysql_fetch_array()。
  • 是的,完全照原样复制了它。它很奇怪:S.. 我正在查看数据库,它有 3 行 @_@
【解决方案2】:

首先 - 你必须切换到 mysqli 或 PDO

第二 - 您必须遍历返回的数据。在您当前的脚本中,您只将一个结果提取到您的数组中。

$connection = mysql_connect( "localhost", "admin", "" );
mysql_select_db( "test", $connection );
$result = mysql_query( "SELECT category_name FROM category" );

while( $row = mysql_fetch_array($result) ) {
    echo $row['category_name'], "<br />";
}

【讨论】:

    【解决方案3】:

    您将获得结果集中的第一行。

    对 mysql_fetch_array 的后续调用将返回下一个结果行。

    尝试使用:

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
       var_dump($row);
    }
    

    似乎使 OP 感到困惑的其他答案的问题是 MYSQL_ASSOC 告诉 mysql_fetch_array 使用列名作为索引返回一个数组,而不是默认的 MYSQL_BOTH(它使用数字和命名数组索引)。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 2012-06-24
      • 2017-03-24
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多