Не удается получить mysqli bind_param связать переменную - PullRequest
2 голосов
/ 26 ноября 2011

Я пишу следующий код для извлечения строки из таблицы:

$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();

Вот код для подключения ();

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();
            }
        }
    }

Если я повторю запрос и выполню его в Navicat с идентификатором, равным значению $ _SESSION ['id'], он вернет мне строку. Но на веб-странице он показывает вывод в виде:

Num rows = 0

Что не так с кодом? Обратите внимание, что echo $ _SESSION ['id'] отображает значение.

Спасибо

1 Ответ

1 голос
/ 26 ноября 2011

Сохраните ваш набор результатов с store_result(), затем получите доступ к $stmt->num_rows как свойство, а не как метод.(не используйте ())

$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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...