prepared statement method.. confused

前端 未结 2 1676
情话喂你
情话喂你 2021-01-07 17:27

I don\'t know what\'s missing or why it isn\'t displaying data. My code is working if I\'m not using prepared statements. When I used prepared statements, it seems that code

相关标签:
2条回答
  • 2021-01-07 17:54

    your od_id type in DB is string or integer? if a integer

    public function selectUserInfo($id){
    
        $stmt = $this->con->prepare("SELECT * FROM users WHERE os_id = ?");
        $stmt->bind_param("i", $id);//use 'i' instead of 's'
    
        if($stmt->execute() == FALSE){
            trigger_error($stmt->error, E_USER_ERROR);
        }else{
            $data = array();
            while($row = $stmt->fetch()){
                $data[] = $row;
            }
            return $data;
        }
    

    }

    0 讨论(0)
  • 2021-01-07 17:55

    As we have defined, that the issue was with your foreach.

    What is wrong is with how you're reading it, fetch does not have associative properties so need to use the bind_result.

    Here is a hack that is also suggested at the fetch manual:

    public function selectUserInfo($id)
    {
        $stmt = $this->con->prepare("SELECT * FROM users WHERE os_id=?");
        $stmt->bind_param('i', $id);
        if(!$stmt->execute())
        {
            trigger_error($stmt->error, E_USER_ERROR);
        }
        else
        {
            $bindVarArray = array();
            $data = array();
            $result;
            $meta = $stmt->result_metadata();
            while ($column = $meta->fetch_field())
            {
                $columnName = str_replace(' ', '_', $column->name);
                $bindVarArray[] = &$result[$columnName];
            }
            call_user_func_array(array($stmt, 'bind_result'), $bindVarArray);
    
            $index = 0;
            while ($stmt->fetch() != null)
            {
                foreach ($result as $k => $v)
                {
                    $data[$index][$k] = $v;
                }
                $index++;
            }
            return $data;
        }
    }
    

    Then you can use your foreach to read it like this:

    foreach ($data as $result)
    {
        echo $result['os_fname'], ' => ', $result['os_lname'], "\n";
    }
    

    And you can always use print_r to see how your resulting array is:

    print_r($data);
    
    0 讨论(0)
提交回复
热议问题