Результат при подготовленных выражения (mysqli)

Tuman

Новичок
Результат при подготовленных выражения (mysqli)

Типичный запрос на основе подготовленных выражений с заданными параметрами
PHP:
$stmt = $mysqli->prepare("SELECT * FROM table WHERE id = ?");
$id = 5;
$stmt->bind_param('i', $id);
$stmt->execute();
var_dump($stmt->fetch());
// bool(true)
Что, в mysqli нельзя получить результат от этого запроса в виде массива? Только с использованием заданных результатов?

-~{}~ 06.08.08 16:14:

В PDO с этим проще :(
 

Anarki

Новичок
Предположение: а если через bind_result одну переменную забиндить, она массивом окажется?
 

Tuman

Новичок
Автор оригинала: Anarki
Предположение: а если через bind_result одну переменную забиндить, она массивом окажется?
С bind_result это уже будет использование "заданных результатов". В принципе, оно то логично, что нельзя без них. В комментариях на php.net предлагают нечто вроде:
PHP:
$mysqli = new mysqli($dbHost, $dbUsername, $dbPassword, $dbDatabase);
$stmt = $mysqli->prepare('select * from foobar');
$stmt->execute();
$stmt->store_result();
$meta = $stmt->result_metadata();

$bindResult = '$stmt->bind_result(';
while ($columnName = $meta->fetch_field()) {
    $bindResult .= '$results["'.$columnName->name.'"],';
}
$bindResult = rtrim($bindResult, ',') . ');';

eval($bindResult);
$stmt->fetch();

echo var_dump($results);
Но по мне, это извращение. Так намного лучше
PHP:
$db = new PDO('mysql:dbname=db;host=localhost', 'login', 'password'); 
$stmt = $db->prepare("SELECT * FROM table WHERE id = 15");
$stmt->execute();
$row = $stmt->fetch();
А, значит, придется использовать PDO.
 
Сверху