豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: PHP二次开发MySQL

🤖 Ai回答:
PHP与MySQL二次开发指南

下面我将为您提供PHP与MySQL二次开发的全面指南,包括核心概念、常用操作和最佳实践。

一、数据库连接

1、使用PDO连接MySQL(推荐)

php
<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
$pdo = new PDO(mysql:host=$host;dbname=$dbname;charset=utf8, $username, $password);
$pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo-setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
echo 数据库连接成功;
} catch (PDOException $e) {
die(连接失败: 、$e-getMessage());
}
?

2、使用mysqli连接MySQL

php
<?php
$host = 'localhost';
$username = 'your_username';
$password = 'your_password';
$database = 'your_database';

$mysqli = new mysqli($host, $username, $password, $database);

if ($mysqli-connect_error) {
die(连接失败: 、$mysqli-connect_error);
}

$mysqli-set_charset(utf8);
?

二、基本CRUD操作

1、创建数据(Create)

php
// 使用PDO
$sql = INSERT INTO users (name, email, created_at) VALUES (?, ?, NOW());
$stmt = $pdo-prepare($sql);
$stmt-execute(['John Doe', 'john@65.hk']);
$lastInsertId = $pdo-lastInsertId();

// 使用mysqli
$sql = INSERT INTO users (name, email, created_at) VALUES (?, ?, NOW());
$stmt = $mysqli-prepare($sql);
$stmt-bind_param(ss, $name, $email);
$name = John Doe;
$email = john@65.hk;
$stmt-execute();
$lastInsertId = $stmt-insert_id;

2、读取数据(Read)

php
// 使用PDO查询单条记录
$sql = SELECT * FROM users WHERE id = ?;
$stmt = $pdo-prepare($sql);
$stmt-execute([1]);
$user = $stmt-fetch();

// 使用PDO查询多条记录
$sql = SELECT * FROM users WHERE active = ?;
$stmt = $pdo-prepare($sql);
$stmt-execute([1]);
$users = $stmt-fetchAll();

// 使用mysqli查询
$sql = SELECT * FROM users WHERE active = 1;
$result = $mysqli-query($sql);
$users = [];
while ($row = $result-fetch_assoc()) {
$users[] = $row;
}

3、更新数据(Update)

php
// 使用PDO
$sql = UPDATE users SET name = ?, email = ? WHERE id = ?;
$stmt = $pdo-prepare($sql);
$stmt-execute(['Jane Doe', 'jane@65.hk', 1]);
$affectedRows = $stmt-rowCount();

// 使用mysqli
$sql = UPDATE users SET name = ?, email = ? WHERE id = ?;
$stmt = $mysqli-prepare($sql);
$stmt-bind_param(ssi, $name, $email, $id);
$name = Jane Doe;
$email = jane@65.hk;
$id = 1;
$stmt-execute();
$affectedRows = $stmt-affected_rows;

4、删除数据(Delete)

php
// 使用PDO
$sql = DELETE FROM users WHERE id = ?;
$stmt = $pdo-prepare($sql);
$stmt-execute([1]);
$affectedRows = $stmt-rowCount();

// 使用mysqli
$sql = DELETE FROM users WHERE id = ?;
$stmt = $mysqli-prepare($sql);
$stmt-bind_param(i, $id);
$id = 1;
$stmt-execute();
$affectedRows = $stmt-affected_rows;

三、高级查询技巧

1、分页查询

php
function getUsersWithPagination($page = 1, $perPage = 10) {
global $pdo;

$offset = ($page 1) * $perPage;
$sql = SELECT * FROM users WHERE active = 1 ORDER BY id DESC LIMIT :limit OFFSET :offset;
$stmt = $pdo-prepare($sql);
$stmt-bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt-bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt-execute();

return $stmt-fetchAll();
}

// 获取总记录数用于分页
function getTotalUsers() {
global $pdo;

$sql = SELECT COUNT(*) as total FROM users WHERE active = 1;
$stmt = $pdo-query($sql);
return $stmt-fetch()['total'];
}

2、事务处理

php
try {
$pdo-beginTransaction();

// 执行多个SQL操作
$sql1 = UPDATE account SET balance = balance ? WHERE id = ?;
$stmt1 = $pdo-prepare($sql1);
$stmt1-execute([100, 1]);

$sql2 = UPDATE account SET balance = balance + ? WHERE id = ?;
$stmt2 = $pdo-prepare($sql2);
$stmt2-execute([100, 2]);

$pdo-commit();
echo 事务执行成功;
} catch (Exception $e) {
$pdo-rollBack();
echo 事务执行失败: 、$e-getMessage();
}

四、安全最佳实践

1、预防SQL注入

php
// 错误的方式 容易导致SQL注入
$sql = SELECT * FROM users WHERE id = 、$_GET['id']; // 危险!

// 正确的方式 使用参数化查询
$sql = SELECT * FROM users WHERE id = ?;
$stmt = $pdo-prepare($sql);
$stmt-execute([$_GET['id']]);

2、输入验证和过滤

php
// 验证邮箱
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
die(无效的邮箱地址);
}

// 过滤HTML标签
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$bio = filter_var($_POST['bio'], FILTER_SANITIZE_SPECIAL_CHARS);

五、实用封装类示例

php
class Database {
private $pdo;
private $error;

public function __construct($host, $dbname, $username, $password) {
try {
$this-pdo = new PDO(
mysql:host=$host;dbname=$dbname;charset=utf8,
$username,
$password,
[
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE = PDO::FETCH_ASSOC
]
);
} catch (PDOException $e) {
$this-error = $e-getMessage();
die(数据库连接失败: 、$this-error);
}
}

public function query($sql, $params = []) {
try {
$stmt = $this-pdo-prepare($sql);
$stmt-execute($params);
return $stmt;
} catch (PDOException $e) {
die(查询错误: 、$e-getMessage());
}
}

public function fetch($sql, $params = []) {
return $this-query($sql, $params)-fetch();
}

public function fetchAll($sql, $params = []) {
return $this-query($sql, $params)-fetchAll();
}

public function insert($table, $data) {
$columns = implode(, , array_keys($data));
$placeholders = implode(, , array_fill(0, count($data), ?));
$sql = INSERT INTO $table ($columns) VALUES ($placeholders);

$this-query($sql, array_values($data));
return $this-pdo-lastInsertId();
}

public function update($table, $data, $where, $whereParams) {
$setClause = [];
foreach (array_keys($data) as $column) {
$setClause[] = $column = ?;
}
$setClause = implode(, , $setClause);

$sql = UPDATE $table SET $setClause WHERE $where;
$params = array_merge(array_values($data), $whereParams);

Ai作答

📣 商家广告


广告招商

广告招商

香港vps

广东过滤器

八字


0

IP地址: 156.218.115.174

搜索次数: 0

提问时间: 2025-11-08 10:38:19

🛒 域名购买
ltqz.cn
58.gold
kb.gs
62.gs
jqe.com.cn
chang.net.cn
zong.org.cn
wangai.net
kkky.com.cn
n-f.cn

❓️ 热门提问
vps香港购买
ip地址怎么查看具体位置
大连虚拟主机
linux开发网页
我的云空间在哪里打开
开发者联盟网站
idc托管哪家好
机房起火
olayangroup域名
德国欧洲云服务器
豌豆Ai站群搜索引擎系统

🌐 域名评估
xphone.organic
b.ln.cn
fcff.cn
vivo.qh.cn
su7.tj.cn
dmqg.cn
pf.gs
musk.tax
drone.pub
SouHuAi.com.cn

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
果果考典  Search engine  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 79277 79278 79279 下一篇