Call to undefined method mysqli_stmt::get_result

后端 未结 10 844
难免孤独
难免孤独 2020-11-21 05:10

Here\'s my code:

include \'conn.php\';
$conn = new Connection();
$query = \'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Passwo         


        
相关标签:
10条回答
  • 2020-11-21 05:18

    I know this was already answered as to what the actual problem is, however I want to offer a simple workaround.

    I wanted to use the get_results() method however I didn't have the driver, and I'm not somewhere I can get that added. So, before I called

    $stmt->bind_results($var1,$var2,$var3,$var4...etc);
    

    I created an empty array, and then just bound the results as keys in that array:

    $result = array();
    $stmt->bind_results($result['var1'],$result['var2'],$result['var3'],$result['var4']...etc);
    

    so that those results could easily be passed into methods or cast to an object for further use.

    Hope this helps anyone who's looking to do something similar.

    0 讨论(0)
  • 2020-11-21 05:22

    for those searching for an alternative to $result = $stmt->get_result() I've made this function which allows you to mimic the $result->fetch_assoc() but using directly the stmt object:

    function fetchAssocStatement($stmt)
    {
        if($stmt->num_rows>0)
        {
            $result = array();
            $md = $stmt->result_metadata();
            $params = array();
            while($field = $md->fetch_field()) {
                $params[] = &$result[$field->name];
            }
            call_user_func_array(array($stmt, 'bind_result'), $params);
            if($stmt->fetch())
                return $result;
        }
    
        return null;
    }
    

    as you can see it creates an array and fetches it with the row data, since it uses $stmt->fetch() internally, you can call it just as you would call mysqli_result::fetch_assoc (just be sure that the $stmt object is open and result is stored):

    //mysqliConnection is your mysqli connection object
    if($stmt = $mysqli_connection->prepare($query))
    {
        $stmt->execute();
        $stmt->store_result();
    
        while($assoc_array = fetchAssocStatement($stmt))
        {
            //do your magic
        }
    
        $stmt->close();
    }
    
    0 讨论(0)
  • 2020-11-21 05:29

    I was getting this same error on my server - PHP 7.0 with the mysqlnd extension already enabled.

    Solution was for me (thanks to this page) was to deselect the mysqli extension and select nd_mysqli instead.

    NB - You may be able to access the extensions selector in your cPanel. (I access mine via the Select PHP Version option.)

    0 讨论(0)
  • 2020-11-21 05:29

    Here is my alternative. It is object-oriented and is more like mysql/mysqli things.

    class MMySqliStmt{
        private $stmt;
        private $row;
    
        public function __construct($stmt){
            $this->stmt = $stmt;
            $md = $stmt->result_metadata();
            $params = array();
            while($field = $md->fetch_field()) {
                $params[] = &$this->row[$field->name];
            }
            call_user_func_array(array($stmt, 'bind_result'), $params) or die('Sql Error');
        }
    
        public function fetch_array(){
            if($this->stmt->fetch()){
                $result = array();
                foreach($this->row as $k => $v){
                    $result[$k] = $v;
                }
                return $result;
            }else{
                return false;
            }
        }
    
        public function free(){
            $this->stmt->close();
        }
    }
    

    Usage:

    $stmt = $conn->prepare($str);
    //...bind_param... and so on
    if(!$stmt->execute())die('Mysql Query(Execute) Error : '.$str);
    $result = new MMySqliStmt($stmt);
    while($row = $result->fetch_array()){
        array_push($arr, $row);
        //for example, use $row['id']
    }
    $result->free();
    //for example, use the $arr
    
    0 讨论(0)
  • 2020-11-21 05:30

    Your system is missing the mysqlnd driver!

    If you are able to install new packages on your (Debian/Ubuntu-based) server, install the driver:

    sudo apt-get install php5-mysqlnd
    

    and then restart your web server:

    sudo /etc/init.d/apache2 restart
    
    0 讨论(0)
  • 2020-11-21 05:34

    Please read the user notes for this method:

    http://php.net/manual/en/mysqli-stmt.get-result.php

    It requires the mysqlnd driver... if it isn't installed on your webspace you will have to work with BIND_RESULT & FETCH!

    https://secure.php.net/manual/en/mysqli-stmt.bind-result.php

    https://secure.php.net/manual/en/mysqli-stmt.fetch.php

    0 讨论(0)
提交回复
热议问题