【问题标题】:php with framework of codeigniter带有codeigniter框架的php
【发布时间】:2017-12-02 23:43:14
【问题描述】:
function invitation_result()
{
    $this->load->database();
    $user_id = $_GET['user_id'];
    $qry = mysql_query("select * from sent_invitations where user_id='$user_id'");

    if (mysql_num_rows($qry) > 0) 
    {
        while ($row = mysql_fetch_array($qry))
        {
           $mobile_number = $row['mobile_number'];

           $qry1 = mysql_query("select mobile_number from users where mobile_number = '$mobile_number'");
           $row1 = mysql_fetch_array($qry1);
           $mobile_number = $row1['mobile_number'];
           $users[] = array('mobile_number' => $mobile_number );
           return $users;
        }
    }
}

以上是我的编码。 在 sent_invitation 表中有 3 行 user_id=11。 从那里我试图根据user_id获取所有三行的mobile_number。 所有 3 行的 mobile_number 都不同。 从 sent_notification 表中获取 mobile_number 后。 我将 mobile_number 与 mobile_number of users 表进行比较。 我看到其中 3 个 mobile_numbers 在用户表中。 我试图展示所有这些。 bt 问题是我的代码 id 只显示一行,并且是 3 中的最后一个手机号码

【问题讨论】:

  • 使用mysqli,因为mysql已经被贬值了。
  • 提示:另外,你不必使用$this->load->database();,你可以在 config/autoload.php 中自动加载它
  • 而且codeigniter这里有数据库功能codeigniter.com/user_guide/database/query_builder.html
  • send_invitation 表中的单个用户如何可能拥有三个不同的手机号码
  • 这是我运行 {"status":"true","re​​sponse":[{"mobile_number":"69"}]} 时得到的结果

标签: php mysql codeigniter join


【解决方案1】:
function invitation_result()
{
    $this->load->database();
    $user_id = $_GET['user_id'];
    $qry = $this->db->query("select * from sent_invitations where user_id='$user_id'");
    $results = $qry->result();
    foreach ($results as $result) 
    {
        $mobile_number = $result->mobile_number;

        $qry1 = $this->db->query("select mobile_number from users where mobile_number = '$mobile_number'");
        $results1 = $qry1->result();
        foreach ($results1 as $result1) 
        {
            $row1 = mysql_fetch_array($qry1);
            $mobile_number = $result1->mobile_number;
            $users = array('mobile_number' => $mobile_number );
            return $users;
        }
    }
}

【讨论】:

    【解决方案2】:

    首先,你能像这样简化查询吗?

    $sql = "select a.*, b.mobile_number as user_mobile_number
            from   sent_invitations a
            join   users            b on a.user_id = b.user_id";
    

    或

    $sql = "select a.*, b.mobile_number as user_mobile_number
            from   sent_invitations a
            join   users            b on a.mobile_number = b.mobile_number";
    

    这取决于这两个表如何关联。

    现在您可以在一个查询中查看 sent_invitations.mobile_number 是否也在 users.mobile_number 中找到。如果这返回多个相同的行,则在 SELECT 之后放置 distinct 关键字

    第二,回到你的代码,我认为你应该在阻塞时将 return $users 移出表单

     while ($row = mysql_fetch_array($qry)) {
        // your code
     }
     return $users;
    

    祝你好运;

    【讨论】:

      【解决方案3】:

      您应该使用while 循环,您将在内部循环中获得mobile_number。

      function invitation_result()
      {
          $this->load->database();
          $user_id = $_GET['user_id'];
          $qry = $this->db->query("select * from sent_invitations where user_id='$user_id'");
      
          if ($qry->num_rows() > 0) 
          {
              while ($qry->result_array() as $row)
              {
                 $mobile_number = $row['mobile_number'];
      
                 $qry1 = $this->db->query("select mobile_number from users where mobile_number = '$mobile_number'");
                 if($qry1->num_rows() > 0){
                 while($qry1->result_array() as $row1){
                    $mobile_number = $row1['mobile_number'];
                    $users[] = array('mobile_number' => $mobile_number );
                 }
                 return $users;
                 }
              }
          }
      }
      

      您应该使用 codeigniter 数据库查询而不是 mysql 自定义查询。因为mysql 已被弃用。您可以使用以下代码:

      function invitation_result()
      {
          $this->load->database();
          $user_id = $_GET['user_id'];
          $qry = mysqli_query("select * from sent_invitations where user_id='$user_id'");
      
          if (mysql_num_rows($qry) > 0) 
          {
              while ($row = mysql_fetch_array($qry))
              {
                 $mobile_number = $row['mobile_number'];
      
                 $qry1 = mysql_query("select mobile_number from users where mobile_number = '$mobile_number'");
                 $row1 = mysql_fetch_array($qry1);
                 $mobile_number = $row1['mobile_number'];
                 $users[] = array('mobile_number' => $mobile_number );
                 return $users;
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        由于您使用的是 Codeigniter,您应该遵循 MVC 模式:

        所以控制器中的代码应该是:

        public function invitation_result(){
             $userId = 0;
             if(($_GET['user_id']) && is_numeric($_GET['user_id']) && $_GET['user_id'] > 0){
              $userId = $_GET['user_id'];
             }
             $data = $this->User_model->getDataFromID($userId);
             return $data;
        }
        

        模型的代码应该是:

        public function getDataFromID($userId){
            $arrReturn = array();
            if(($userId) && is_numeric($userId) && $userId > 0){
                $this->db->select('*');//You can put the required fields here like : name,mobile_number...
                $this->db->from('sent_invitations');
                $this->db->where("user_id",$user_id);
                $query = $this->db->get();
                $result = $query->result_array();
                if(!empty($result)){
                    foreach($result as $key=>$value){
                        $this->db->select('*');
                        $this->db->from('mobile_number');
                        $this->db->where("mobile_number",$value['mobile_number']);
                        $querySub = $this->db->get();
                        $resultSub = $querySub->result_array();
                        if(!empty($resultSub)){
                            array_push($arrReturn,$resultSub);
                        }
                    }
                    return $arrReturn;
                }
            }else{
                return $arrReturn; 
            }
        }
        

        当我写出答案时,您已经解决了错误,但这个答案将对未来的用户有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-28
          • 2011-08-13
          • 2014-11-06
          • 2013-01-08
          • 2011-02-04
          • 1970-01-01
          • 2011-04-11
          相关资源
          最近更新 更多