If result_metadata() returns false but error/errno/sqlstate tells you no error occurred, this means your query is one that does not produce a result set, i.e. an INSERT/UPDATE/DELETE query instead of a SELECT query.
This is stated in the documentation where it says "If a statement passed to mysqli_prepare() is one that produces a result set, mysqli_stmt_result_metadata() returns the result object", but it might not be clear to everyone what this entails exactly.
Hope this helps.mysqli_stmt::result_metadata
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli_stmt::result_metadata
Референца за `mysqli-stmt.result-metadata.php` со подобрена типографија и навигација.
mysqli_stmt::result_metadata
mysqli_stmt_result_metadata
класата mysqli_driver
mysqli_stmt::result_metadata -- mysqli_stmt_result_metadata — Враќа метаподатоци од сет на резултати од подготвена изјава
= NULL
Напиши целосна ознака на елемент
Процедурален стил
Ако исказот предаден на mysqli_prepare() е оној што произведува сет на резултати, mysqli_stmt_result_metadata() враќа објект со резултат што може да се користи за обработка на мета информации како што се вкупниот број на полиња и информации за поединечни полиња.
Оваа функција враќа празен mysqli_result објект кој може да се користи за пристап до метаподатоци од подготвениот исказ без да се преземат вистинските редови податоци. Нема потреба да се користи оваа функција кога се користи mysqli_stmt_get_result() за преземање на целиот сет на резултати од подготвен исказ како објект со резултат.
Забелешка:
Овој објект со сет на резултати може да се предаде како аргумент само на функциите базирани на полиња што обработуваат метаподатоци од сет на резултати, како што се:
Забелешка: Сет на резултати вратен од mysqli_stmt_result_metadata() содржи само метаподатоци. Не содржи резултати од редови. Редовите се добиваат со повикување mysqli_stmt_get_result() на рачката на исказот или со mysqli_stmt_fetch().
Параметри
-
statement објектот како свој прв аргумент. mysqli_stmt Само процедурален стил: А mysqli_stmt_init().
Вратени вредности
Враќа објект со резултат или false ако се појави грешка. Ако исказот не произведува сет на резултати, false се враќа исто така.
Errors/Exceptions
Ако е овозможено известување за грешки на mysqli (MYSQLI_REPORT_ERROR) и бараната операција не успее, се генерира предупредување. Ако, дополнително, режимот е поставен на MYSQLI_REPORT_STRICT, а mysqli_sql_exception наместо тоа се фрла.
Примери
Пример #1 Обектно-ориентиран стил
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->query("DROP TABLE IF EXISTS friends");
$mysqli->query("CREATE TABLE friends (id int, name varchar(20))");
$mysqli->query("INSERT INTO friends VALUES (1,'Hartmut'), (2, 'Ulf')");
$stmt = $mysqli->prepare("SELECT id, name FROM friends");
$stmt->execute();
/* get resultset for metadata */
$result = $stmt->result_metadata();
/* retrieve field information from metadata result set */
$field = $result->fetch_field();
printf("Fieldname: %s\n", $field->name);
?>Пример #2 Процедурален стил
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "test");
mysqli_query($link, "DROP TABLE IF EXISTS friends");
mysqli_query($link, "CREATE TABLE friends (id int, name varchar(20))");
mysqli_query($link, "INSERT INTO friends VALUES (1,'Hartmut'), (2, 'Ulf')");
$stmt = mysqli_prepare($link, "SELECT id, name FROM friends");
mysqli_stmt_execute($stmt);
/* get resultset for metadata */
$result = mysqli_stmt_result_metadata($stmt);
/* retrieve field information from metadata result set */
$field = mysqli_fetch_field($result);
printf("Fieldname: %s\n", $field->name);
?>Види Исто така
- mysqli_prepare() - Подготвува SQL израз за извршување
- mysqli_free_result() - Ослободува меморија поврзана со резултат
- mysqli_stmt_get_result() - Поврзува променливи со подготвена изјава за складирање на резултати