PHP 控制 MySQL 语句主要涉及到 PHP 中的 MySQLi 或 PDO 扩展,用于与 MySQL 数据库进行交互。这些扩展提供了执行 SQL 查询、处理结果集、管理事务等功能。
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 执行查询
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// 输出数据
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
mysqli_close($conn);
?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->rowCount() > 0) {
// 输出数据
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
} catch(PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
$conn = null;
?>
问题:用户输入的数据可能会被恶意利用,执行非预期的 SQL 语句。
原因:直接将用户输入拼接到 SQL 语句中。
解决方法:使用预处理语句。
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
问题:数据库连接长时间不活动,导致连接超时。
原因:数据库服务器配置了连接超时时间。
解决方法:设置连接的保持活动时间。
$conn->setAttribute(PDO::ATTR_TIMEOUT, 120); // 设置连接超时时间为120秒
问题:数据库连接未正确关闭,导致资源泄漏。
原因:忘记调用 mysqli_close()
或 $conn = null
。
解决方法:确保在脚本结束前关闭数据库连接。
mysqli_close($conn);
// 或
$conn = null;
通过以上内容,您可以全面了解 PHP 控制 MySQL 语句的基础概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云