Kumar Kush
Kumar Kush

Reputation: 2586

Cannot get mysqli bind_param bind a variable

I am writing following code to fetch a row from table:

$query = "SELECT  ........FROM ............WHERE........AND ID = ?";
$conn = new Connection();
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();
echo 'Num rows = '.$stmt->num_rows();

Here's the code for Connection();

define('SERVER', 'localhost');
define('USER', 'root');
define('PASS', 'xxx');
define('DB', 'xxx');

class Connection{
        var $mysqli = null;

        function __construct(){
            try{
                if(!$this->mysqli){
                    $this->mysqli = new MySQLi(SERVER, USER, PASS, DB);
                    if(!$this->mysqli)
                        throw new Exception('Could not create connection using MySQLi', 'NO_CONNECTION');
                }
            }
            catch(Exception $ex){
                echo "ERROR: ".$e->getMessage();
            }
        }
    }

If I echo the query and run it on Navicat with ID equal to the value of $_SESSION['id'], it does return me a row. But on the web-page, it show output as:

Num rows = 0

What's wrong with the code? Plz note that echo $_SESSION['id'] displays the value.

Thanks

Upvotes: 2

Views: 452

Answers (1)

Michael Berkowski
Michael Berkowski

Reputation: 270609

Store your result set with store_result(), then access $stmt->num_rows as a property, not a method. (don't use ())

$query = "SELECT  ........FROM ............WHERE........AND ID = ?";
$conn = new Connection();
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();

// Call store_result() before accessing num_rows()
$stmt->store_result();

// And access num_rows as a property, not a method
echo 'Num rows = '.$stmt->num_rows;

Upvotes: 1

Related Questions