使用mysqli_query()執行MySQL查詢

一、mysqli_query()的概述

在PHP中,數據庫操作是開發最常用的部分之一。mysqli_query()函數是PHP中一個重要的函數,它用於執行MySQL數據庫的查詢(Query)。mysqli_query()函數使用MySQLi擴展庫中的函數來執行查詢操作。

mysqli_query()語法如下:

mysqli_query(connection,query,resultmode);

其中,

  • mysqli_query():函數名
  • connection:必需。規定要使用的MySQL連接。
  • query:必需。規定查詢字符串。
  • resultmode:可選。常量,默認MYSQLI_STORE_RESULT。如果指定MYSQLI_USE_RESULT,則返回結果集將不會被緩存,這對處理大量數據非常有用。

二、mysqli_query()的用法及示例

用mysqli_query()函數執行SELECT語句並返回結果集,然後再通過一遍遍歷把結果集中的數據取出來,示例代碼如下:

$conn = mysqli_connect('localhost', 'root', '','test'); 
if (!$conn){    
    die("連接數據庫失敗:" . mysqli_connect_error()); 
} 

$sql = "SELECT * FROM user"; 
$result = mysqli_query($conn,$sql); 

if(mysqli_num_rows($result)>0){
    while($row = mysqli_fetch_assoc($result)){ 
        echo "name: " . $row['name']. " - pwd:" . $row['pwd']. "
"; } }else{ echo '沒有數據'; } mysqli_close($conn);

該示例代碼用mysqli_query()函數執行一條SELECT語句,在結果集中取出全部數據並輸出。其中,mysqli_fetch_assoc()函數用於從結果集中取出數據行並將其封裝成一個關聯數組(key=>value),方便開發者使用。

三、mysqli_query()函數的常見問題

1. mysqli_query()函數返回值的問題

當執行SELECT語句時,mysqli_query()函數會返回一個結果集。當執行非SELECT語句時,mysqli_query()函數會返回一個boolean類型值,關於mysqli_query()函數返回值的問題,下面是一些需要關注的問題:

  • 當查詢遇到錯誤時,mysqli_query()函數返回false值,

    $sql = "SELECT * FROM user"; 
    $result = mysqli_query($conn,$sql); 
    if(!$result){ 
        die('Invalid query: ' . mysqli_error($conn)); 
    }
  • 在使用INSERT、UPDATE、或DELETE語句時,mysqli_query()返回的是影響的行數:

    $sql = "UPDATE user SET pwd=456 WHERE pwd=123"; 
    $result = mysqli_query($conn,$sql); 
    if($result){ 
        echo "數據更新成功"; 
    }else{ 
        echo "數據更新失敗"; 
    }
  • 當mysql_query()函數執行的是不合規的語句時,返回false值。如果出現語法錯誤,則會報告一個 1064 錯誤,請檢查拼寫錯誤和語法錯誤:

    $sql = "select * from user wherr username='aaa'"; 
    $result = mysqli_query($conn,$sql); 
    if(!$result){ 
        die('Invalid query: ' . mysqli_error($conn)); 
    }

2. mysqli_query()函數的性能問題

對於非SELECT語句的執行,可以選擇加入mysqli_use_result()或mysqli_store_result()參數,避免在執行語句時將結果全部存儲在客戶端內存中。

mysqli_store_result()存儲結果集在客戶端用於處理。該函數適合於返回非常大的數據量的查詢。

mysqli_use_result()會立即返回查詢結果,避免在查詢時將所有數據載入PHP內存。下面我們來對比一下這兩個PHP函數在獲取較大數據量的SELECT查詢結果中的時間性能表現。

require_once "config.php"; 
require_once "common.php"; 

$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE); 
if (!$conn){    
    die("連接數據庫失敗:" . mysqli_connect_error()); 
} 

$sql = "SELECT * FROM user_letter"; 
$start_time = get_millisecond();//獲取當前毫秒時間戳

$result = mysqli_query($conn,$sql,MYSQLI_STORE_RESULT); 

if(mysqli_num_rows($result)>0){ 
    //遍歷每個記錄並輸出 
    while($row = mysqli_fetch_assoc($result)){ 
        //echo "id: ".$row["id"]." - content:".$row["content"]." - create_time:".$row["create_time"]."
"; } }else{ echo '沒有數據'; } $end_time = get_millisecond();//獲取當前毫秒時間戳 echo "Get result from DB using mysqli_store_result() costs ".($end_time-$start_time)."ms."; mysqli_free_result($result); $start_time = get_millisecond(); $result = mysqli_query($conn,$sql,MYSQLI_USE_RESULT); if(mysqli_num_rows($result)>0){ while($row = mysqli_fetch_assoc($result)){ //echo "id: ".$row["id"]." - content:".$row["content"]." - create_time:".$row["create_time"]."
"; } }else{ echo '沒有數據'; } $end_time = get_millisecond(); echo "
Get result from DB using mysqli_use_result() costs ".($end_time-$start_time)."ms."; mysqli_free_result($result); mysqli_close($conn);

該示例代碼中,首先我們連接數據庫,接着,我們在所連接的數據庫中執行一條SELECT語句,並使用mysqli_query()函數在結果集中取出全部記錄。我們在遍歷每個記錄時可以看到注釋掉的輸出動作。

時間測試結果表明使用mysqli_use_result()明顯優於使用mysqli_store_result()。這是因為resultset一旦被關閉,系統會立即將其從服務器內存中刪除。

四、結尾

以上是使用mysqli_query()執行MySQL查詢的相關內容,我們可以看到mysqli_query()是PHP中常用的函數之一,我們可以針對不同的查詢進行優化,在開發過程中,還需注意到查詢字符串時需要對單引號和雙引號的使用,安全問題和數據庫連接的釋放等問題,這些也是不可忽視的。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/291246.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 13:14
下一篇 2024-12-24 13:14

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • CentOS 7在線安裝MySQL 8

    在本文中,我們將介紹如何在CentOS 7操作系統中在線安裝MySQL 8。我們會從安裝環境的準備開始,到安裝MySQL 8的過程進行詳細的闡述。 一、環境準備 在進行MySQL …

    編程 2025-04-27
  • 如何使用MySQL字段去重

    本文將從多個方面為您詳細介紹如何使用MySQL字段去重並給出相應的代碼示例。 一、SELECT DISTINCT語句去重 MySQL提供了SELECT DISTINCT語句,通過在…

    編程 2025-04-27
  • MySQL正則表達式替換

    MySQL正則表達式替換是指通過正則表達式對MySQL中的字符串進行替換。在文本處理方面,正則表達式是一種強大的工具,可以方便快捷地進行字符串處理和匹配。在MySQL中,可以使用正…

    編程 2025-04-27
  • Apache2.4和MySQL的全能編程開發工程師指南

    本文將從多個方面對Apache2.4和MySQL進行詳細的闡述,為全能編程開發工程師提供有用的參考和指導。首先,我們來解答這個標題所涵蓋的主題: 本文將提供Apache2.4和My…

    編程 2025-04-27
  • MySQL JDBC驅動包下載詳解

    一、JDBC驅動介紹 JDBC是Java Database Connectivity的縮寫,它是Java應用程序與各種數據庫連接的標準API,允許Java程序員使用JDBC API…

    編程 2025-04-25

發表回復

登錄後才能評論