PHP快速上手(十三)
PHP 預(yù)處理語句和讀取數(shù)據(jù)
PHP 預(yù)處理語句
預(yù)處理語句是一種在執(zhí)行 SQL 查詢之前預(yù)先編譯 SQL 查詢并將參數(shù)綁定到查詢中的占位符的方法。這可以防止 SQL 注入攻擊,并提高查詢的性能,特別是當(dāng)多次執(zhí)行相同的查詢時(shí)。在 PHP 中,可以使用 MySQLi 或 PDO 來執(zhí)行預(yù)處理語句。下面詳細(xì)介紹如何在 PHP 中使用 MySQLi 和 PDO 中的預(yù)處理語句。
使用 MySQLi 中的預(yù)處理語句
1. 準(zhǔn)備預(yù)處理語句
使用 prepare() 方法準(zhǔn)備預(yù)處理語句,并在 SQL 查詢中使用占位符 ? 或命名占位符 :name 來代替實(shí)際的參數(shù)。
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
2. 綁定參數(shù)
使用 bind_param() 方法將參數(shù)綁定到預(yù)處理語句中的占位符。
$name = "John Doe";
$email = "john@example.com";
$stmt->bind_param("ss", $name, $email);
在上面的示例中,“ss” 表示兩個(gè)參數(shù)都是字符串類型。如果有更多參數(shù),可以添加對應(yīng)的類型標(biāo)識(shí)符。
3. 執(zhí)行預(yù)處理語句
通過調(diào)用 execute() 方法來執(zhí)行預(yù)處理語句。
$stmt->execute();
使用 PDO 中的預(yù)處理語句
1. 準(zhǔn)備預(yù)處理語句
使用 prepare() 方法準(zhǔn)備預(yù)處理語句,并在 SQL 查詢中使用占位符 ? 或命名占位符 :name 來代替實(shí)際的參數(shù)。
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $conn->prepare($sql);
2. 綁定參數(shù)
可以使用 bindParam() 或 bindValue() 方法將參數(shù)綁定到預(yù)處理語句中的占位符。
$name = "John Doe";
$email = "john@example.com";
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
在上面的示例中,PDO::PARAM_STR 表示參數(shù)是字符串類型。如果有其他類型的參數(shù),可以根據(jù)需要選擇不同的參數(shù)類型。
3. 執(zhí)行預(yù)處理語句
通過調(diào)用 execute() 方法來執(zhí)行預(yù)處理語句。
$stmt->execute();
示例:插入多條數(shù)據(jù)
下面是一個(gè)示例,演示如何使用MySQLi 的預(yù)處理語句插入多條數(shù)據(jù):
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
if ($stmt) {
$users = [
["John Doe", "john@example.com"],
["Jane Doe", "jane@example.com"],
["Alice Smith", "alice@example.com"]
];
foreach ($users as $user) {
$stmt->bind_param("ss", $user[0], $user[1]);
$stmt->execute();
}
echo "Records inserted successfully";
$stmt->close();
} else {
echo "Error preparing statement";
}
在上面的示例中,首先準(zhǔn)備了一個(gè)插入語句的預(yù)處理語句,然后使用循環(huán)遍歷要插入的數(shù)據(jù),并將每個(gè)數(shù)據(jù)綁定到預(yù)處理語句中的占位符,最后執(zhí)行預(yù)處理語句。
總結(jié)
預(yù)處理語句是一種在執(zhí)行 SQL 查詢之前預(yù)先編譯 SQL 查詢并將參數(shù)綁定到查詢中的占位符的方法。在 PHP 中,可以使用 MySQLi 或 PDO 來執(zhí)行預(yù)處理語句,這樣可以防止 SQL 注入攻擊,并提高查詢的性能。
PHP 讀取數(shù)據(jù)
當(dāng)使用 MySQLi 和 PDO 讀取數(shù)據(jù)時(shí),你可以選擇使用面向過程的編程風(fēng)格(MySQLi 面向過程),或者面向?qū)ο蟮木幊田L(fēng)格(MySQLi 面向?qū)ο蠛蚉DO)。以下是兩種風(fēng)格的示例以及它們的詳細(xì)解釋:
使用 MySQLi 面向過程讀取數(shù)據(jù)
1. 連接到數(shù)據(jù)庫
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
2. 執(zhí)行查詢并獲取結(jié)果集
$sql = "SELECT id, name, email 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"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "0 results";
}
- 關(guān)閉連接
mysqli_close($conn);
使用 MySQLi 面向?qū)ο笞x取數(shù)據(jù)
1. 連接到數(shù)據(jù)庫
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
2. 執(zhí)行查詢并獲取結(jié)果集
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "id: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "0 results";
}
3. 關(guān)閉連接
$conn->close();
使用 PDO 讀取數(shù)據(jù)
1. 連接到數(shù)據(jù)庫
$dsn = "mysql:host=localhost;dbname=test";
$username = "root";
$password = "";
try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
2. 執(zhí)行查詢并獲取結(jié)果集
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->query($sql);
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "id: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "0 results";
}
3. 關(guān)閉連接文章來源:http://www.zghlxwxcb.cn/news/detail-860358.html
Copy code
$conn = null;
總結(jié)
以上是使用 MySQLi 和 PDO 兩種方式讀取數(shù)據(jù)的示例。無論選擇哪種方式,都需要先連接到數(shù)據(jù)庫,然后執(zhí)行查詢并處理結(jié)果集,最后關(guān)閉連接。MySQLi 和 PDO 在功能上基本相似,但 PDO 更靈活,并支持更多種類的數(shù)據(jù)庫,因此在選擇時(shí)可以根據(jù)個(gè)人偏好和項(xiàng)目需求來決定。文章來源地址http://www.zghlxwxcb.cn/news/detail-860358.html
到了這里,關(guān)于【PHP快速上手(十三)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!