mysqli_stmt для возврата объекта результата - PullRequest
0 голосов
/ 13 апреля 2011

При запросе с использованием mysqli_stmt::prepare() и execute() он не вернет набор результатов. Но нам нужно получить доступ, используя mysqli_stmt:fetch() на объекте stmt. В руководстве по php есть одна функция mysqli_stmt::get_result(), которая возвращает набор результатов в переменную, которую мы определяем, но когда я ее использую, это дает мне неопределенную ошибку метода. В руководстве говорится, что это, вероятно, в SVC, что я не уверен, что.

Коды:

$conn = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD, DB_NAME);
$stmt =  $conn->stmt_init();
$stmt->prepare("select * from users where u_id = ? ");
$stmt->bind_param('s', $param);
$stmt->execute();

Редактировать:
Я знаю, что могу использовать функции bind_result () и fetch () для извлечения записи, например:

$stmt->bind_result($column1, $column2, $column3);

while ($stmt->fetch()) {
    echo "Column 1: $column1\n";
    echo "Column 2: $column2\n";
    echo "Column 3: $column3\n";
}

Но моя цель - получить набор результатов (объект типа ресурса) после выполнения, что-то вроде этого:

$result = $stmt->execute();

чтобы я мог использовать обычный mysqli::fetch_object в наборе результатов

$conn->fetch_object($result);

Есть ли способ достичь этого? спасибо

Обновление:
get_result - это именно то, что мне нужно, но она не работает на моем PHP

Ответы [ 4 ]

1 голос
/ 14 апреля 2011

Ну, если вы не хотите использовать mysqli_stmt::fetch(), но mysqli_result::fetch_*(), я думаю, это будет немного громоздко.

http://www.joekolba.com/node/2

В качестве альтернативы используйте PDO .

0 голосов
/ 28 августа 2014

Чтобы включить метод mysqli_stmt :: get_result (), вам нужно использовать расширение mysqlnd (MySQL Native Driver): http://php.net/manual/en/book.mysqlnd.php

По какой-то причине этот конкретный метод не реализован с более обычным libmysqlclient. На моем сервере Debian (а также на моем рабочем столе с Ubuntu) это выполнялось:

sudo apt-get install php5-mysqlnd
0 голосов
/ 01 декабря 2011

Я сделал это следующим образом:

$stmt->prepare("select * from users where u_id = ? ");
$stmt->bind_param('s', $param);
$stmt->execute();

$stmt->bind_result($columns['column_name1'], $columns['column_name2'], $columns['column_name3']);

while ($stmt->fetch()) {
  $row = (object) $columns;
}

Это довольно близко к методу FETCH_OBJECT.Вы можете получить доступ ко всем данным одной строки через $ row-> column_name1 и т. Д. Конечно, вам придется обновить ассоциативный массив столбцов, когда вы изменяете свою таблицу и меняете имена.Но это работает довольно хорошо для меня.Не хотел переходить на PDO - учитывая тот факт, что я перешел на MYSQLi всего несколько дней назад;)

0 голосов
/ 14 апреля 2011

Вам нужно вызвать bind_result, чтобы сообщить mysqli, какие переменные должны содержать столбцы. Затем каждый раз, когда вы вызываете fetch, эти переменные будут автоматически заполняться, и вы сможете обращаться к ним, как обычно. См. Код ниже (не уверен, работает ли он, ymmv).

$conn = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD, DB_NAME);

if($stmt = $conn->prepare('select * from users where u_id = ?'))
{
    $stmt->bind_param("s", $param);
    $stmt->execute();
    $stmt->bind_result($column1, $column2, $column3);

    while ($stmt->fetch()) {
        echo "Column 1: $column1\n";
        echo "Column 2: $column2\n";
        echo "Column 3: $column3\n";
    }

    $stmt->close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...