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 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  微信小程序 canvas开发实例及注意事项  如何在香港服务器上快速搭建免备案网站?  香港服务器租用每月最低只需15元?  Windows Hello人脸识别突然无法使用  如何在Windows环境下新建FTP站点并设置权限?  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  网站制作企业,网站的banner和导航栏是指什么?  浅析上传头像示例及其注意事项  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  javascript中闭包概念与用法深入理解  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速配置高效服务器建站软件?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  网站建设保证美观性,需要考虑的几点问题!  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  如何快速搭建高效WAP手机网站吸引移动用户?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  新三国志曹操传主线渭水交兵攻略  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  iOS UIView常见属性方法小结  如何在橙子建站中快速调整背景颜色?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何在IIS中新建站点并配置端口与IP地址?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Java解压缩zip - 解压缩多个文件或文件夹实例  用v-html解决Vue.js渲染中html标签不被解析的问题  Python文件流缓冲机制_IO性能解析【教程】  JavaScript数据类型有哪些_如何准确判断一个变量的类型  如何用已有域名快速搭建网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  装修招标网站设计制作流程,装修招标流程?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  php结合redis实现高并发下的抢购、秒杀功能的实例  python中快速进行多个字符替换的方法小结  敲碗10年!Mac系列传将迎来「触控与联网」双革新  如何自定义建站之星模板颜色并下载新样式?  如何在IIS中新建站点并配置端口与物理路径?