PHP MySQLi подготовил инструкции и выборку подмножества столбцов

Я использую MySQLi и PHP для вызова хранимой процедуры MySQL с подготовленными операторами. Он возвращает набор результатов с десятками столбцов.

$stmt = $dbconnection->prepare("CALL SomebodysDbProcedure(?);"); $stmt->bind_param("s", $idvalue); $stmt->execute(); $stmt->bind_result($col1, $col2, $col3, ...); 

Однако меня интересует только подмножество выходных столбцов.

В документации указано, что bind_result() требуется для обработки полного набора возвращаемых столбцов:

Обратите внимание, что все столбцы должны быть связаны после mysqli_stmt_execute() и до вызова mysqli_stmt_fetch() .

Нужно ли мне добавлять код для тех столбцов, в которых я не заинтересован? Если это так, приложение распадается, если в будущем будет создан расширенный набор результатов в MySQL, или даже перестроены столбцы. Есть ли обходной путь для этого?

Related of "PHP MySQLi подготовил инструкции и выборку подмножества столбцов"

Я предполагаю, что вы просто не хотите выписывать все эти переменные для функции bind_result (). Вы можете использовать функцию, как показано ниже, вместо функции bind_result (). Передайте ему свой объект $ stmt, и вы получите массив стандартных объектов с полями, которые вы хотите.

 function getResult($stmt) { $valid_fields = array('title', 'date_created'); // enter field names you care about if (is_a($stmt, 'MySQLi_STMT')) { $result = array(); $metadata = $stmt->result_metadata(); $fields = $metadata->fetch_fields(); for (; ;) { $pointers = array(); $row = new \stdClass(); $pointers[] = $stmt; foreach ($fields as $field) { if (in_array($field->name, $valid_fields)) { $fieldname = $field->name; $pointers[] = &$row->$fieldname; } } call_user_func_array('mysqli_stmt_bind_result', $pointers); if (!$stmt->fetch()) break; $result[] = $row; } $metadata->free(); return $result; } return array(); } 

Попробуйте использовать метод fetch_fields php:

 array mysqli_fetch_fields ( mysqli_result $result ) 

http://php.net/manual/en/mysqli-result.fetch-fields.php

Ответ Джонатана Майхака вел меня в правильном направлении. На странице PHP bind_result nieprzeklinaj предоставляет функцию fetch() . Оно работает; используйте его вот так:

 $stmt = $conn->prepare("CALL SomebodysDbProcedure(?);"); $stmt->bind_param("s", $idvalue); $stmt->execute(); $sw = (array)(fetch($stmt)); $s = $sw[0]; // Get first row $dateCreated = $s['date_created']; // Get field date_created 

Изменить: К сожалению, последовательные вызовы внутри одного и того же файла PHP не работают с этим методом.