【问题标题】:Exploding String Then Fetching from Database爆炸字符串然后从数据库中获取
【发布时间】:2011-07-11 03:37:44
【问题描述】:

我有一个包含用户 ID 的数组。我想分解该数组并通过该用户 ID 从数据库中获取所有内容。它仅获取每个用户的 1 个条目,而不是该用户的每个条目。我错过了什么吗?谢谢!


编辑:很抱歉这么稀疏,这是一个漫长的沮丧之夜,我会详细说明。

if ( $follower_array != "" ) 
{

  $followArray = explode(",", $follower_array);
  $followCount = count($followArray);   
  $i = 0;
  $display .= "<table>";

  foreach( $followArray as $key => $value ) 
  {

      $i++;
      $sql = mysql_query(" SELECT * FROM database WHERE mem_id='$value' 
                           ORDER BY bc_date ASC 
                           LIMIT 50
                         ") or die ("error!");

    while ( $row = mysql_fetch_assoc($sql) ) 
    {
      $mem_id  = $row['mem_id'];
      $content = $row['content'];
      $display .= "<td>' .$content. '</td></tr>";
    }

    display .= "</table>";
}

数据库表如下:

members|content
---------------
            id |id
follower_array |mem_id
               |content

folwer 数组看起来像“4,5,6,7”等。

我在虚拟数据中设置了四个成员 ID。它检索 $followArray

中的那些

输出是

  • mem_id:1 - 内容
  • mem_id:2 - 内容
  • mem_id:3 - 内容
  • mem_id:4 - 内容

然后停止。当每个用户有更多内容时,它只会为每个成员检索一个内容。谢谢,我希望我澄清了这一点。

【问题讨论】:

  • 向我们展示您执行并从查询中读取的代码。另外,请告诉我您也没有从数据库中获取该数组...
  • 只是为了好玩:为什么不使用IN 子句?

标签: php mysql arrays explode


【解决方案1】:

这是因为foreach 只增加一次$i,请尝试使用$key,因为它每次foreach 循环运行时都会增加自己,因为它是数组中每个项目的索引。

【讨论】:

    【解决方案2】:

    您可能在错误的列上使用了 WHERE 条件。 $sql 说 SELECT ALL FROM DATABASE WHERE ENTRY ID = $VALUE, 查询中使用的 id 是条目 id,您必须将 id 更改为 user_id=$value

    SELECT * FROM database WHERE user_id='$value' LIMIT 50
    

    【讨论】:

    • 我匆忙提出这个问题。我正在从 user_id 查询它。不过,谢谢您的回复!
    【解决方案3】:
    $searchSQL = "select * from database where id=$value'";
    $result = mysql_query($searchSQL); 
    while ($row = mysql_fetch_array($result))
     { 
      $id= $row['id'];
      $name=$row['name'];
      $phn=$row['phn'];
      $sal=$row['sal'];
     }
    

    这将获取您的数据,您可以在要显示的位置回显

    【讨论】:

      【解决方案4】:

      尝试将 mysql_fetch_array 更改为 mysql_fetch_assoc

      另外,请确保数据库中有不止一行符合您的条件。你应该尝试使用navicat或mysql work bench之类的程序直接查询数据库...

      这应该会有所帮助...


      更新:

      输出是否会因为缺少开始的 tr 标签而出现偏差?此外,您有单引号终止以双引号开头的字符串......也修复了这个问题。

      if ( $follower_array != "" ) {
      
        $followArray = explode(",", $follower_array);
        $followCount = count($followArray);   
        $i = 0;
        $display .= "<table>";
      
        foreach( $followArray as $key => $value ) {
      
          $i++;
          $sql = mysql_query("
              SELECT * 
                FROM database 
               WHERE mem_id='$value' 
            ORDER BY bc_date ASC 
               LIMIT 50
          ") or die ("error!");
      
          while ( $row = mysql_fetch_assoc($sql) ) {
            $mem_id  = $row['mem_id'];
            $content = $row['content'];
      
            $display .= "<td><tr>" .$content. "</td></tr>";
          }
          display .= "</table>";
      }
      

      【讨论】:

      • 是的,它只返回一个结果。我输入的问题有点快,但编辑了它。每个数据库中的所有内容都有一个 ID,我通过成员 ID 检索,但它只返回一个结果。
      • fetch_assoc 没有工作。我不知道在过去的 9 个小时里我是否会因为看这个而失明或什么。在数据库中,每个用户有 10 个,设置了唯一 ID。但是谢谢你的帮助。我将检查 mqsql 工作台,以确保一切都很好。干杯
      • 也许你的mysql很好。但是您缺少起始 tr 标签。可能是造成的。保持 assoc 虽然 ausr 在使用 fetch 数组时有时会得到奇怪的索引,因为它为您提供数字索引和 assoc
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2010-12-20
      • 2020-01-18
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多