当前位置:首页 > 问答 > 正文

数据库管理|数据交互:php如何访问mysql及PHP访问MySQL数据库的详细方法

🚀 PHP与MySQL的完美搭档:从零开始掌握数据库交互

场景引入
凌晨3点,你盯着屏幕上的用户注册表单发呆——明明代码写好了,怎么数据就是存不进数据库?别慌!今天我们就用最直白的方式,手把手教你用PHP和MySQL实现"数据入库自由"!✨


🔧 前期准备(2025年环境参考)

  1. 基础环境

    • PHP 8.3+(2025年主流版本)
    • MySQL 8.0+ 或 MariaDB 10.6+
    • 开发工具:VSCode/PhpStorm
  2. 确保已安装

    数据库管理|数据交互:php如何访问mysql及PHP访问MySQL数据库的详细方法

    # 检查PHP扩展(新版PHP默认已集成mysqli)  
    php -m | grep mysqli

📌 方法一:使用MySQLi(推荐新手)

连接数据库

<?php
$servername = "localhost";
$username = "root";
$password = "your2025Password";
$dbname = "shop_db";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "🎉 数据库连接成功!";
?>

执行SQL查询

// 插入数据示例
$sql = "INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com')";
if ($conn->query($sql) === TRUE) {
    echo "👏 新记录插入成功!";
} else {
    echo "❌ 错误: " . $sql . "<br>" . $conn->error;
}

查询数据

$result = $conn->query("SELECT id, name FROM users");
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 姓名: " . $row["name"]. "<br>";
    }
} else {
    echo "0 结果";
}

关闭连接

$conn->close(); // 养成好习惯!

🛡️ 方法二:PDO(更安全专业)

连接数据库

try {
    $pdo = new PDO(
        "mysql:host=localhost;dbname=shop_db", 
        "root", 
        "your2025Password",
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );
    echo "🔐 PDO连接成功!";
} catch(PDOException $e) {
    die("连接失败: " . $e->getMessage());
}

防SQL注入查询

$stmt = $pdo->prepare("INSERT INTO products (name, price) VALUES (:name, :price)");
$stmt->execute([
    ':name' => 'iPhone 18', 
    ':price' => 9999
]);
echo "🛒 添加了".$stmt->rowCount()."条商品数据";

事务处理(2025年必备技能)

try {
    $pdo->beginTransaction();
    // 转账操作示例
    $pdo->exec("UPDATE accounts SET balance = balance - 500 WHERE user_id = 1");
    $pdo->exec("UPDATE accounts SET balance = balance + 500 WHERE user_id = 2");
    $pdo->commit();
    echo "💸 转账成功!";
} catch(Exception $e) {
    $pdo->rollBack();
    echo "转账失败: ".$e->getMessage();
}

💡 2025年最佳实践建议

  1. 密码安全

    // 永远不要这样!
    $password = $_POST['password']; 
    // 应该这样(PHP 8.3+)
    $hashed_pw = password_hash($_POST['password'], PASSWORD_DEFAULT);
  2. 错误处理

    // 开发环境显示错误
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    // 生产环境记录日志
    ini_set('log_errors', 1);
    ini_set('error_log', '/var/log/php_errors.log');
  3. 连接池优化

    // 使用持久连接(高并发场景)
    $dbh = new PDO(
        'mysql:host=localhost;dbname=test',
        'user',
        'pass',
        [PDO::ATTR_PERSISTENT => true]
    );

🧠 常见问题QA

Q:为什么我的中文数据变成乱码?
A:建立连接后立即设置字符集:

数据库管理|数据交互:php如何访问mysql及PHP访问MySQL数据库的详细方法

$conn->set_charset("utf8mb4"); // MySQLi
// 或PDO连接DSN添加:
"mysql:host=localhost;dbname=test;charset=utf8mb4"

Q:2025年还用学习MySQLi吗?
虽然PDO是趋势,但仍有60%遗留项目使用MySQLi(2025年统计),两者都要掌握!


从最基础的MySQLi连接到PDO的预处理语句,再到事务处理,PHP操作MySQL就像🗝️钥匙和锁的关系。

  1. 永远验证和过滤用户输入
  2. 优先使用预处理语句防注入
  3. 生产环境关闭错误显示

现在就去试试把你的数据存入MySQL吧!遇到问题?评论区见~ 👇

发表评论