如果 result_metadata() 返回 false,但 error/errno/sqlstate 顯示沒有發生錯誤,這表示您的查詢是不會產生結果集的查詢,例如 INSERT/UPDATE/DELETE 查詢,而不是 SELECT 查詢。
文件中已說明這一點:「如果傳遞給 mysqli_prepare() 的陳述式會產生結果集,則 mysqli_stmt_result_metadata() 會返回結果物件」,但並非每個人都清楚這究竟意味著什麼。
希望這有幫助。
(PHP 5, PHP 7, PHP 8)
mysqli_stmt::result_metadata -- mysqli_stmt_result_metadata — 從預備語句返回結果集詮釋資料
物件導向風格
public mysqli_stmt::result_metadata(): mysqli_result|false
mysqli_stmt_result_metadata(mysqli_stmt $statement
): mysqli_result|false
如果傳遞給 mysqli_prepare() 的語句會產生結果集,mysqli_stmt_result_metadata() 會返回一個結果物件,可用於處理中繼資訊,例如欄位總數和個別欄位資訊。:
注意
mysqli_free_result()
如果傳遞給 mysqli_prepare() 的語句會產生結果集,mysqli_stmt_result_metadata() 會返回一個結果物件,可用於處理中繼資訊,例如欄位總數和個別欄位資訊。:
當您使用完結果集結構後,應該釋放它,您可以通過將其傳遞給 mysqli_free_result() 來完成。
參數
statement
返回值
false
。錯誤/異常
MYSQLI_REPORT_ERROR
)且請求的操作失敗,則會產生警告。此外,如果模式設定為 MYSQLI_REPORT_STRICT
,則會改為拋出 mysqli_sql_exception。範例
<?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();
/* 取得中繼資料的結果集 */
$result = $stmt->result_metadata();
/* 從中繼資料結果集中檢索欄位資訊 */
$field = $result->fetch_field();
printf("欄位名稱:%s\n", $field->name);
/* 關閉結果集 */
$result->close();
/* 關閉連線 */
$mysqli->close();
?>
範例 #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);
/* 取得中繼資料的結果集 */
$result = mysqli_stmt_result_metadata($stmt);
/* 從中繼資料結果集中檢索欄位資訊 */
$field = mysqli_fetch_field($result);
printf("Fieldname: %s\n", $field->name);
/* 關閉結果集 */
mysqli_free_result($result);
/* 關閉連線 */
mysqli_close($link);
?>
如果 result_metadata() 返回 false,但 error/errno/sqlstate 顯示沒有發生錯誤,這表示您的查詢是不會產生結果集的查詢,例如 INSERT/UPDATE/DELETE 查詢,而不是 SELECT 查詢。
文件中已說明這一點:「如果傳遞給 mysqli_prepare() 的陳述式會產生結果集,則 mysqli_stmt_result_metadata() 會返回結果物件」,但並非每個人都清楚這究竟意味著什麼。
希望這有幫助。