热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP+MySQL最基础的数据库操作方法备忘录

2019独角兽企业重金招聘Python工程师标准PHPMySQL是比较常见的搭配,我用这篇文章记录最基础的数据库操作方法,后面我认为属于这方面基础

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

PHP+MySQL是比较常见的搭配,我用这篇文章记录最基础的数据库操作方法,后面我认为属于这方面基础的知识,都会统一补充记录在这篇文章中。

注:由于我主观上不喜欢Oracle这个公司,而MySQL被Oracle收购后,骨子里发生了一些变化,因此我更换了MariaDB,MySQL的亲兄弟,仍然坚持MySQL当初开源信念的亲兄弟。本质上都是MySQL的内核,因此下面所有的数据库操作代码,都是可以直接在MariaDB使用的。

晚上搭好PHP+Apache的基础环境,以及安装好MySQL数据库后,写了一个最简单的数据库连接代码,结果报了如下经典错误:

Fatal error: Class 'mysqli' not found

代码如下:

' . 'Connect DB error';exit;}
?>

其实这问题比较简单,从PHP引擎返回的错误就知道mysqli没有被正确的加载,绝大多数的问题都发生在php.ini文件的配置中,“extension=php_mysqli.dll”这个配置项前面默认的分号没有去掉。这个错误我倒没有犯,php安装路径中的ext目录中,也有php_mysqli.dll这个文件,那问题发生在哪里呢?

不卖关子了,问题应该还是发生在php.ini文件中哪个地方写错了。走读后发现这个地方没有修改。

extension_dir = "ext"

我当时脑子没多想,觉得PHP引擎是能够自动找到这个相对路径的。但后来想想,PHP引擎是被Apache加载的,Apache可不知道这个相对关系。还是老老实实的把这个地方改成了绝对路径,然后就OK了。

其实可以在这个代码之前,先写这么一段,看看mysqli组件是否已经被加载了,这个方法可以应用于其他组件的加载前的判断。

if (extension_loaded('mysqli'))
{echo 'yes';
}
else
{echo 'no';
}


好了,这个问题解决了。下面记录PHP+MySQL的最基本操作方法。例子很简单,就是一个用户注册和系统登录。

首先,创建数据库、表和用户

例子很简单,这里附上建表脚本,使用了root用户。

DROP DATABASE IF EXISTS `test`;
CREATE DATABASE `test`
USE `test`;DROP TABLE IF EXISTS `tbl_user`;
CREATE TABLE `tbl_user` (`username` varchar(32) NOT NULL default '',`password` varchar(32) NOT NULL default '',PRIMARY KEY  (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;


其次,创建注册和登录的html页面,分别是register.html和login.html。如下图所示

235131_O3OK_551955.png        235131_owuy_551955.png


然后,完成register_do.php和login_do.php的业务逻辑,代码比较简单,就不再详细解释了

register_do.php

' . 'Connect DB error';exit;}$query = "select * from tbl_user where username = '" . $username . "'";echo '

' . $query;$result = $db->query($query);if ($result){echo '

' . 'The user '. $username .' exist';echo '

' . 'Back to register';} else{$query = "insert into tbl_user values ('". $username ."', '". $password ."')";echo '

' . $query;$result = $db->query($query);if ($result){echo '

' . 'Register successful';} }
?>

login_do.php

' . 'Connect DB error';exit;}$query = "select * from tbl_user where username = '" . $username . "' and password = '" . $password . "'";echo '

' . $query;$result = $db->query($query);if ($result->num_rows){echo '

' . 'Login successful';}else{echo '

' . 'Login failed';    }
?>

userlist.php

新增这么一个文件,用于查询出所有注册的用户,主要是记录mysqli->query->fetch_assoc的使用方法

' . 'Connect DB error';exit;}echo '

' . 'All user as follows:';$query = "select * from tbl_user order by username"; if ($result = $db->query($query)){while ($row = $result->fetch_assoc()){echo '

' . 'Username : ' . $row['username'] . '    delete';}}
?>

该页面最终的显示效果如下图所示:

221100_JAei_551955.png

userdelete.php

' . 'Connect DB error';exit;}$query = "delete from tbl_user where username = '" . $username . "'";echo $query;if ($result = $db->query($query)){echo '

' . 'Delete user ' . $username . ' successful';}else{echo '

' . 'Delete user ' . $username . '  failed';}echo '

' . 'Back to user list';
?>


Prepare预处理

预处理的基本原理和适用场景就不在这里多说了,还是用一个简单的添加图书信息的例子来记录。

首先,图书添加的页面如下图所示(bookadd.html):

214636_CIpk_551955.png

建表脚本如下:

DROP DATABASE IF EXISTS `test`;
CREATE DATABASE IF NOT EXISTS `test`;
USE `test`;DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE IF NOT EXISTS `tbl_book` (`isbn` varchar(32) NOT NULL,`title` varchar(32) NOT NULL,`author` varchar(32) NOT NULL,`price` float NOT NULL,PRIMARY KEY (`isbn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;

添加的逻辑处理代码如下(bookadd_do.php):

这里特别要注意的是这句话“$db->query("set names utf-8")”,代表向数据库写入数据时,采用utf-8编解码,显示的对数据库表操作的编解码进行设置,以防止中文的乱码。后面我会专门针对这个技术点记录一篇文章。

' . 'Connect DB error';exit;}$db->query("set names utf-8");  //特别注意这句话$stmt = $db->stmt_init();$stmt->prepare("insert into tbl_book values (?,?,?,?)");$stmt->bind_param("sssd", $isbn, $title, $author, $price);$stmt->execute();echo '

' . 'Affect rows is ' . $stmt->affected_rows;echo '

' . 'Go to book list page';
?>

显示图书信息的逻辑代码如下,同样注意这句话“$db->query("set names utf-8")”:

' . 'Connect DB error';exit;}$db->query("set names utf-8");  //特别注意这句话$stmt = $db->stmt_init();$stmt->prepare("select * from tbl_book");$stmt->bind_result($isbn, $title, $author, $price);$stmt->execute();while($stmt->fetch()){echo 'ISBN : ' . $isbn . '

';echo 'Title : ' . $title . '

';echo 'Author : ' . $author . '

';echo 'Price : ' . $price . '

';echo '

' . '-----------------------------' .  '

';}
?>

显示的页面如下图所示:

220457_Re8z_551955.png

好了,最基础的部分就记录到这,PHP引擎提供了很方便的数据库操作方法,但正是开发绝不是如此简单,各种异常要仔细考虑如何捕获,如何处理。数据库的设计也是一个挺好玩的话题。

保持学习的动力!


转:https://my.oschina.net/idearye/blog/190207



推荐阅读
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 为了确保数据库的高效运行,本文介绍了一种方法,通过编写定时任务脚本来自动清理 `order` 表中状态为 0 或为空的无效订单记录。该脚本使用 PHP 编写,并设置时区为中国标准时间,每 10 分钟执行一次,以保持数据库的整洁和性能优化。此外,还详细介绍了如何配置定时任务以及脚本的具体实现步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
author-avatar
哇哈哈啦啦啦啦_729
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有