在PHP面向對象的mysqli數據庫連接庫中,使用最為廣泛和基礎的函數之一就是mysqli_query函數。其可以用於執行任何SQL語句(包括創建和刪除數據庫、數據表等操作),並返回執行結果。本篇文章將圍繞mysqli_query函數,從多個方面進行詳細的闡述。
一、mysqli_query函數的基本使用
mysqli_query函數有兩個參數:
1. mysqli對象,用於建立與數據庫的連接;
2. 要執行的SQL語句。
其返回值包括兩種類型:查詢語句返回的是mysqli_result對象,非查詢語句返回的是boolean類型。
$conn = new mysqli($host, $username, $passwd, $dbname); $sql = "SELECT * FROM users WHERE id = 1"; $result = $conn->query($sql); if ($result) { // 處理結果集 } else { echo "查詢失敗"; }
二、mysqli_query函數的使用注意事項
1. SQL語句中的字符串需要使用單引號擴起來。例如:
$sql = "SELECT * FROM users WHERE name = 'John'";
2. 如果SQL語句中有變量,需要使用佔位符的方式來替換。例如:
$name = "John"; $sql = "SELECT * FROM users WHERE name = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $name); // 綁定參數 $stmt->execute(); // 執行查詢 $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // 處理結果集 }
3. 需要注意SQL注入問題,應該使用預處理語句和參數綁定來避免。例如:
$username = mysqli_real_escape_string($conn, $_POST['username']); $password = mysqli_real_escape_string($conn, $_POST['password']); $sql = "SELECT * FROM users WHERE username = ? AND password = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $username, $password); // 綁定參數 $stmt->execute(); // 執行查詢 $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // 處理結果集 }
三、mysqli_query函數的應用場景
1. 數據庫的增、刪、改操作
例如:
$sql = "INSERT INTO users (name, age, gender) VALUES ('John', 28, 'male')"; $conn->query($sql);
2. 數據庫查詢操作
例如:
$sql = "SELECT * FROM users WHERE age > 20"; $result = $conn->query($sql); while ($row = $result->fetch_assoc()) { // 處理結果集 }
3. 數據庫事務控制
例如:
$conn->begin_transaction(); // 開始事務 $sql1 = "UPDATE users SET balance = balance - 100 WHERE id = 1"; $sql2 = "UPDATE users SET balance = balance + 100 WHERE id = 2"; $conn->query($sql1); $conn->query($sql2); $conn->commit(); // 提交事務
四、mysqli_query函數的局限和替代方案
1. mysqli_query只能處理單條SQL語句,對於複雜查詢可以使用mysqli多語句查詢函數multi_query代替。例如:
$sql = "SELECT * FROM users; SELECT * FROM orders"; $conn->multi_query($sql); do { if ($result = $conn->store_result()) { while ($row = $result->fetch_assoc()) { // 處理結果集 } $result->free(); } } while ($conn->more_results() && $conn->next_result());
2. 對於更加複雜的查詢和數據操作,可以考慮使用ORM框架,例如Laravel的Eloquent、Yii的ActiveRecord等。
五、總結
本篇文章主要介紹了mysqli_query函數的基本使用,包括SQL語句的書寫、參數綁定和預處理等。同時,還介紹了mysqli_query函數的應用場景和局限,提供了一些替代方案,讓讀者了解如何在不同的情況下更好地選擇和使用mysqli_query函數。
原創文章,作者:GOSL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/142571.html