php增删改查怎么学_零基础入门php数据库操作必知基础【教程】

发布时间 - 2025-12-31 00:00:00    点击率:
零基础应选 PDO。它支持多数据库、预处理统一、防注入直观;需手动开启异常模式和设置 UTF8;INSERT 报错多因绑定参数不匹配;SELECT 需调用 fetch();DELETE/UPDATE 用 rowCount() 获取影响行数。

PHP 连接 MySQL 用 mysqli 还是 PDO

零基础直接选 PDO。它支持多种数据库(MySQL、PostgreSQL、SQLite),预处理语句写法统一,防 SQL 注入更直观;mysqli 虽然轻量,但面向对象和过程式混用容易混乱,且只适配 MySQL。
注意:PDO 默认不开启异常模式,出错时静默失败——必须手动设置:

$pdo = new PDO($dsn, $user, $pass, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);

INSERT 时为什么总报 “SQLSTATE[HY000]: General error”?

这通常是预处理语句绑定参数出错导致的,比如:

  • 占位符数量和 execute() 传入数组元素个数不一致
  • 用了命名参数(如 :name)却传了索引数组(['张三']
  • 字段名拼错或表不存在,但没开异常模式,错误被吞掉
正确写法示例:
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute(['name' => '李四', 'email' => 'lisi@example.com']);

SELECT 返回空数组,但数据明明存在

常见原因不是 SQL 写错,而是:

  • 没调用 fetch()fetchAll() —— prepare()execute() 不返回结果,只是执行
  • 用了 PDO::FETCH_NUM 却按键名取值(如 $row['name']
  • 查询条件含中文或特殊字符,但连接未设 UTF8:PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
安全读取一行的写法:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([123]);
$user = $stmt->fetch(); // 注意这里!

DELETE 和 UPDATE 怎么确认影响了几行?

execute() 返回布尔值,不代表影响行数。必须调用 rowCount()

$stmt = $pdo->prepare("UPDATE users SET status = ? WHERE id = ?");
$stmt->execute(['active', 456]);
echo $stmt->rowCount(); // 输出实际更新的行数,可能为 0
如果返回 0,说明没匹配到记录——这不是错误,而是业务常态,别当成异常抛出。另外,WHERE 条件漏写会导致全表误更新,上线前务必检查。

PDO 的事务、错误上下文、字符集初始化这些点,初学时容易跳过,但一旦出问题,排查成本远高于提前加两行配置。


# mysql  # php  # ai  # 为什么  # sql  # 面向对象  # select  # Error  # mysqli  # pdo  # delete  # 对象  # sqlite  # postgresql  # 数据库  # 行数  # 用了  # 绑定  # 不代表  # 这不是  # 不存在  # 报错  # 能为  # 传了  # 抛出 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 英语简历制作免费网站推荐,如何将简历翻译成英文?  用yum安装MySQLdb模块的步骤方法  详解Android——蓝牙技术 带你实现终端间数据传输  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何配置任务调度?(Cron Job示例)  如何在腾讯云服务器快速搭建个人网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  jQuery validate插件功能与用法详解  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  EditPlus中的正则表达式实战(6)  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  图册素材网站设计制作软件,图册的导出方式有几种?  详解CentOS6.5 安装 MySQL5.1.71的方法  制作公司内部网站有哪些,内网如何建网站?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  b2c电商网站制作流程,b2c水平综合的电商平台?  微信小程序 闭包写法详细介绍  音乐网站服务器如何优化API响应速度?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  大连 网站制作,大连天途有线官网?  浅谈javascript alert和confirm的美化  如何快速搭建FTP站点实现文件共享?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何在阿里云部署织梦网站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel如何配置和使用缓存?(Redis代码示例)  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  昵图网官网入口 昵图网素材平台官方入口  微信推文制作网站有哪些,怎么做微信推文,急?  js实现获取鼠标当前的位置  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  javascript中闭包概念与用法深入理解  JavaScript模板引擎Template.js使用详解  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何快速建站并高效导出源代码?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Android使用GridView实现日历的简单功能  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel如何使用模型观察者?(Observer代码示例)