答案:PHP连接MySQL推荐使用mysqli或PDO扩展,需经建立连接、设置字符集、执行SQL、关闭连接等步骤,并优先采用预处理语句防止SQL注入。

PHP连接MySQL数据库的核心在于利用PHP内置的数据库扩展,最常用且推荐的是
mysqli
PDO
PHP连接MySQL数据库通常涉及以下几个关键步骤,这里我们以
mysqli
建立数据库连接: 这是第一步,你需要提供MySQL服务器的地址(通常是
localhost
<?php
$servername = "localhost"; // MySQL服务器地址
$username = "your_username"; // 数据库用户名
$password = "your_password"; // 数据库密码
$dbname = "your_database"; // 要连接的数据库名称
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "数据库连接成功!";
?>设置字符集(非常重要): 为了避免中文乱码等问题,在建立连接后立即设置字符集是一个好习惯。
<?php
// ... 前面的连接代码 ...
if (!$conn->set_charset("utf8mb4")) { // 推荐使用utf8mb4支持更广泛的字符,包括Emoji
printf("加载字符集 utf8mb4 失败: %s\n", $conn->error);
exit();
}
echo "字符集设置成功!";
?>执行SQL查询: 连接建立并字符集设置好后,你就可以执行各种SQL语句了,比如
SELECT
INSERT
UPDATE
DELETE
查询数据 (SELECT):
<?php
// ... 前面的连接代码 ...
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出每行数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
?>插入数据 (INSERT):
立即学习“PHP免费学习笔记(深入)”;
<?php
// ... 前面的连接代码 ...
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
?>关闭数据库连接: 当你完成所有数据库操作后,务必关闭连接以释放资源。
<?php // ... 前面的连接代码和查询代码 ... $conn->close(); echo "数据库连接已关闭。"; ?>
以上就是使用
mysqli
mysqli
这个问题,坦白说,是很多PHP开发者初入数据库操作时都会纠结的。我的建议是,如果项目规模较大、需要支持多种数据库(不只是MySQL),或者对代码的抽象性和灵活性有较高要求,那么
PDO
PDO
然而,如果你只是专注于MySQL,并且偏好更直接、更“贴近金属”的API,那么
mysqli
PDO
mysqli
mysqli_connect()
new mysqli()
mysqli
总的来说,没有绝对的“最好”,只有最适合你项目需求的。但无论如何,请务必远离那些已经废弃的
mysql_
在PHP连接MySQL的过程中,遇到错误几乎是家常便饭,尤其是在开发初期。最常见的错误无外乎以下几种:
$servername
$username
$password
$dbname
localhost
127.0.0.1
systemctl status mysql
service mysql status
mysql.sock
在PHP代码中,我们应该始终包含错误检查机制。对于
mysqli
$conn->connect_error
$conn->error
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
// 这里的die()会终止脚本执行,并在页面上显示错误信息
die("数据库连接失败: " . $conn->connect_error);
}
// 假设这里有一个查询
$sql = "SELECT * FROM non_existent_table"; // 故意制造一个错误
$result = $conn->query($sql);
if (!$result) {
// 这里的错误信息会告诉你查询出了什么问题
echo "查询错误: " . $conn->error;
}
?>对于
PDO
try-catch
<?php
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置PDO错误模式为异常,这样在出现错误时会抛出PDOException
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "数据库连接成功!";
// 假设这里有一个查询
$sql = "SELECT * FROM another_non_existent_table";
$stmt = $conn->prepare($sql);
$stmt->execute();
} catch(PDOException $e) {
// 捕获并显示错误信息
echo "数据库操作失败: " . $e->getMessage();
}
?>我的经验是,在开发阶段,不要害怕让错误信息直接显示出来(当然,在生产环境中要避免)。详细的错误信息是解决问题的关键线索。
SQL注入无疑是数据库安全领域最臭名昭著的漏洞之一,它能让恶意用户通过输入数据来篡改你的SQL查询,从而窃取、修改甚至删除你的数据。防止SQL注入,在我看来,是任何与数据库交互的应用程序开发者必须掌握的核心技能。
最有效且推荐的防御机制是使用预处理语句(Prepared Statements)和参数绑定(Parameter Binding)。无论是
mysqli
PDO
它的基本原理是:你先向数据库发送一个带有占位符的SQL模板,数据库会预编译这个模板。然后,你再将实际的数据作为参数发送给数据库。数据库会严格区分SQL代码和数据,确保任何用户输入都被视为数据,而不是可执行的SQL代码。
使用mysqli的预处理语句:
<?php
// ... 假设 $conn 已经建立并连接成功 ...
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
// 检查预处理是否成功
if (!$stmt) {
die("预处理失败: " . $conn->error);
}
// 绑定参数
// 'sss' 表示三个参数都是字符串类型 (s=string, i=integer, d=double, b=blob)
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数值
$firstname = "Alice";
$lastname = "Smith";
$email = "alice@example.com";
$stmt->execute(); // 执行第一个插入
$firstname = "Bob";
$lastname = "Johnson";
$email = "bob@example.com";
$stmt->execute(); // 执行第二个插入
echo "新记录插入成功";
$stmt->close(); // 关闭预处理语句
?>使用PDO的预处理语句:
<?php
// ... 假设 $conn 已经建立并连接成功 (PDO 对象) ...
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)");
// 绑定命名参数或问号占位符
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// 设置参数值并执行
$firstname = "Charlie";
$lastname = "Brown";
$email = "charlie@example.com";
$stmt->execute();
// 也可以直接在execute中传递数组
$stmt->execute([
':firstname' => 'David',
':lastname' => 'Lee',
':email' => 'david@example.com'
]);
echo "新记录插入成功";
?>除了预处理语句,还有一些辅助性的安全措施:
DROP TABLE
GRANT
在我看来,预处理语句是防止SQL注入的黄金标准,它的重要性再怎么强调都不为过。当你开始写任何涉及用户输入的数据库操作时,第一反应就应该是“我该如何用预处理语句来做这个?”。
以上就是PHP如何连接到MySQL数据库_PHP连接MySQL数据库的步骤与代码示例的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号