隨著網路技術的發展,資料庫成為了資料儲存的重要手段。而PHP是一種廣泛使用的伺服器端腳本語言,在網站開發中也扮演了重要的角色。在PHP中,查詢資料庫是開發中常用的操作之一。那麼,本文將介紹在PHP中如何進行查詢操作。
一、連接資料庫
在進行查詢操作之前,我們需要先連接資料庫。 PHP提供了一個內建函數mysqli_connect(),它用來開啟到MySQL伺服器的新連線。此函數需要傳入伺服器位址、使用者名稱、密碼以及資料庫名稱等參數。範例程式碼如下:
<?php $servername = "localhost"; $username = "yourusername"; $password = "yourpassword"; $dbname = "yourdbname"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 检测连接是否成功 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?>
在上述程式碼中,我們傳遞了四個參數:伺服器位址、使用者名稱、密碼、資料庫名稱。如果連線失敗,則透過mysqli_connect_error()函數輸出錯誤訊息。如果連接成功,則輸出「Connected successfully」。
二、執行查詢語句
在連線成功後,我們可以使用mysqli_query()函數執行查詢語句。它需要傳入兩個參數:連接物件和要執行的SQL語句。範例程式碼如下:
<?php $sql = "SELECT id, name, age FROM users"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // 输出数据 while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>"; } } else { echo "0 results"; } // 关闭连接 mysqli_close($conn); ?>
在上述程式碼中,我們執行了一則SELECT語句,從users表中查詢出id、name和age列的資料。我們使用mysqli_query()函數執行該語句,並將結果儲存在$result中。如果查詢到了數據,則透過mysqli_fetch_assoc()函數逐行讀取結果集中的數據,並輸出到頁面。如果未查詢到數據,則輸出「0 results」。最後,我們使用mysqli_close()函數關閉連線。
三、防止SQL注入
雖然上述範例中已經完成了基本的查詢操作,但是由於SQL注入的存在,我們在實際開發中必須更加謹慎。而PHP提供了一些函數來預防SQL注入攻擊。
本函數用於轉義SQL查詢中的特殊字符,例如單引號、雙引號等。在執行查詢操作之前,我們可以使用函數對輸入資料進行轉義,以避免惡意使用者傳入SQL注入程式碼。範例程式碼如下:
<?php $name = mysqli_real_escape_string($conn, $_POST['name']); $sql = "SELECT * FROM users WHERE name='$name'"; $result = mysqli_query($conn, $sql); if ($result) { // 输出数据 while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>"; } } else { echo "0 results"; } // 关闭连接 mysqli_close($conn); ?>
在上述程式碼中,我們使用了mysqli_real_escape_string()函數對使用者輸入的$name進行了轉義。在建構查詢語句時,將轉義後的$name插入到SQL語句中,避免了SQL注入攻擊。
在PHP中,我們也可以使用預處理語句來避免SQL注入攻擊。預處理語句是在執行SQL語句之前,先向資料庫發送一條預處理指令,告訴資料庫要執行的SQL語句的結構和資料類型。然後,再將查詢參數與該預處理語句一起傳送至資料庫,以避免SQL注入攻擊。範例程式碼如下:
<?php $stmt = $conn->prepare("SELECT * FROM users WHERE name=?"); $stmt->bind_param("s", $name); $name = mysqli_real_escape_string($conn, $_POST['name']); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>"; } } else { echo "0 results"; } // 关闭连接 $stmt->close(); $conn->close(); ?>
在上述程式碼中,我們首先使用$conn->prepare()函數建立了預處理語句,並使用$stmt->bind_param()函數綁定了參數。在執行查詢操作之前,我們將使用者輸入的$name進行轉義,並將其賦值給綁定參數中的$s變數。最後,我們使用$stmt->execute()函數執行預處理語句,使用$stmt->get_result()函數來取得查詢結果,從而完成了查詢操作。
四、結語
在PHP中查詢資料庫是很常見的操作,但由於SQL注入攻擊的存在,我們必須更加謹慎。在實際開發中,我們通常會結合以上介紹的防注入措施來執行查詢操作。希望本文能對PHP開發中的查詢操作有所幫助。
以上是php 怎麼查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!