PHP快速入门13-MySQL数据库与Redis操作

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: PHP快速入门与实战,本篇文章介绍的内容,MySQL数据库与Redis操作,后续更多内容将收录在专栏PHP快速入门与实战。

@TOC


前言

本文已收录于PHP全栈系列专栏:PHP快速入门与实战

在这里插入图片描述

一、PHP连接MySQL

PHP链接MySQL可以使用mysqli或PDO两种方式,其中mysqli是面向过程的,而PDO是面向对象的。以下是使用mysqli链接MySQL的示例代码:

1.1 建立数据库链接

$conn = mysqli_connect("localhost", "username", "password", "database");
if (!$conn) {
   
   
    die("连接失败: " . mysqli_connect_error());
}

1.2 插入数据

$sql = "INSERT INTO users (name, age, email) VALUES ('John', 25, 'john@example.com')";
if (mysqli_query({
   
   mathJaxContainer[0]}sql)) {
   
   
    echo "新记录插入成功";
} else {
   
   
    echo "Error:" . {
   
   mathJaxContainer[1]}conn);
}

1.3 更新数据

$sql = "UPDATE users SET name='Jane' WHERE id=1";
if (mysqli_query({
   
   mathJaxContainer[2]}sql)) {
   
   
    echo "记录更新成功";
} else {
   
   
    echo "Error:" . {
   
   mathJaxContainer[3]}conn);
}

1.4 删除数据

$sql = "DELETE FROM users WHERE id=1";
if (mysqli_query({
   
   mathJaxContainer[4]}sql)) {
   
   
    echo "记录删除成功";
} else {
   
   
    echo "Error:" . {
   
   mathJaxContainer[5]}conn);
}

1.5 查询数据并输出结果

$sql = "SELECT * FROM users";
{
   
   mathJaxContainer[6]}conn, $sql);

if (mysqli_num_rows($result) > 0) {
   
   
    while({
   
   mathJaxContainer[7]}result)) {
   
   
        echo "Name: " . {
   
   mathJaxContainer[8]}row["age"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
   
   
    echo "没有记录";
}

1.6 查询数据并返回结果

$sql = "SELECT * FROM users WHERE age > 18";
{
   
   mathJaxContainer[9]}conn, $sql);

if (mysqli_num_rows($result) > 0) {
   
   
    while({
   
   mathJaxContainer[10]}result)) {
   
   
        print_r($row); // 输出结果数组
    }
} else {
   
   
    echo "没有记录";
}

1.7 获取查询结果的行数

$sql = "SELECT * FROM users";
{
   
   mathJaxContainer[11]}conn, $sql);

echo "共有 ". mysqli_num_rows($result) . " 条记录";

1.8 获取查询结果的列数

$sql = "SELECT * FROM users";
{
   
   mathJaxContainer[12]}conn, $sql);

{
   
   mathJaxContainer[13]}conn);
echo "共有 ".$num_columns." 列";

1.9 获取查询结果的字段名

$sql = "SELECT * FROM users";
{
   
   mathJaxContainer[14]}conn, $sql);
{
   
   mathJaxContainer[15]}result);

foreach ({
   
   mathJaxContainer[16]}field) {
   
   
    echo $field->name."<br>";
}

1.10 获取查询结果的字段类型

$sql = "SELECT * FROM users";
{
   
   mathJaxContainer[17]}conn, $sql);
{
   
   mathJaxContainer[18]}result);

foreach ({
   
   mathJaxContainer[19]}field) {
   
   
    echo $field->type."<br>";
}

1.11 获取上一次操作影响的行数

$sql = "DELETE FROM users WHERE age < 18";
mysqli_query({
   
   mathJaxContainer[20]}sql);
echo "删除了 ". mysqli_affected_rows($conn) . " 条记录";

1.12 开启事务

mysqli_autocommit($conn, false);
mysqli_begin_transaction($conn);

// 执行一系列操作

if (成功) {
   
   
    mysqli_commit($conn);
} else {
   
   
    mysqli_rollback($conn);
}

1.13 设置字符集

mysqli_set_charset($conn, "utf8");

1.14 预处理语句

{
   
   mathJaxContainer[21]}conn, "INSERT INTO users (name, age, email) VALUES (?, ?, ?)");
mysqli_stmt_bind_param({
   
   mathJaxContainer[22]}name, {
   
   mathJaxContainer[23]}email);

$name = "John";
$age = 25;
$email = "john@example.com";
mysqli_stmt_execute($stmt);

1.15 关闭数据库连接

mysqli_close($conn);

二、PHP链接操作Redis

2.1 安装Redis

PHP链接redis:

  1. 首先需要安装redis扩展,可以使用pecl命令进行安装:pecl install redis
  2. 在php.ini文件中添加extension=redis.so
  3. 使用以下代码链接redis数据库:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

其中'127.0.0.1'是redis主机地址,6379是redis端口号。

2.2 操作redis的30个例子

  1. 设置key和value: $redis->set('key', 'value');
  2. 获取key的值: $redis->get('key');
  3. 判断key是否存在: $redis->exists('key');
  4. 删除key: $redis->del('key');
  5. 设置key过期时间: $redis->expire('key', 60);
  6. 获取key过期时间: $redis->ttl('key');
  7. 自增: $redis->incr('key');
  8. 自减: $redis->decr('key');
  9. 加入列表: $redis->lPush('key', 'value1', 'value2', ...);
  10. 弹出列表中的一个元素: $redis->lPop('key');
  11. 获取列表长度: $redis->lLen('key');
  12. 获取列表中指定范围内的元素: $redis->lRange('key', $start, $end);
  13. 在列表中删除指定元素: $redis->lRem('key', 'value');
  14. 对集合进行添加操作: $redis->sAdd('key', 'value1', 'value2', ...);
  15. 获取集合的元素个数: $redis->sCard('key');
  16. 判断元素是否在集合中: $redis->sIsMember('key', 'value');
  17. 从集合中删除一个元素: $redis->sRem('key', 'value');
  18. 向有序集合中添加元素: $redis->zAdd('key', $score, 'value');
  19. 获取有序集合中元素的数量: $redis->zCard('key');
  20. 获取有序集合中指定范围内的元素: $redis->zRange('key', $start, $end);
  21. 从有序集合中删除指定元素: $redis->zRem('key', 'value');
  22. 获取hash表中所有的键值对: $redis->hGetAll('key');
  23. 设置hash表中某个字段的值: $redis->hSet('key', 'field', 'value');
  24. 获取hash表中某个字段的值: $redis->hGet('key', 'field');
  25. 判断hash表中某个字段是否存在: $redis->hExists('key', 'field');
  26. 删除hash表中某个字段: $redis->hDel('key', 'field');
  27. 发布消息: $redis->publish('channel', 'message');
  28. 订阅消息: $redis->subscribe(array('channel'), function($redis, $channel, $message) {echo $message;});
  29. 监听某个key的变化: $redis->subscribe(array('__keyspace@0__:key'), function($redis, $channel, $message) {echo $channel, ':', $message;});
  30. 设置某个key的值,当值为指定值时才更新: $redis->watch('key'); $redis->multi(); $redis->set('key', 'new_value'); $redis->exec();

    总结

    以上就是关于本篇文章介绍的内容,MySQL数据库与Redis操作,后续更多内容将收录在专栏PHP快速入门与实战中,感谢大家支持。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
1月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
103 9
|
4天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:百万数据量的优化实录
【10月更文挑战第6天】 在现代互联网应用中,随着用户量的增加和业务逻辑的复杂化,数据量级迅速增长,这对后端数据库系统提出了严峻的挑战。尤其是当数据量达到百万级别时,传统的数据库解决方案往往会遇到性能瓶颈。本文将分享一次使用MySQL与Redis协同优化大规模数据统计的实战经验。
20 3
|
4天前
|
NoSQL 关系型数据库 BI
记录一次MySQL+Redis实现优化百万数据统计的方式
【10月更文挑战第13天】 在处理百万级数据的统计时,传统的单体数据库往往力不从心,这时结合使用MySQL和Redis可以显著提升性能。以下是一次实际优化案例的详细记录。
18 1
|
4天前
|
消息中间件 NoSQL 关系型数据库
一文彻底搞定Redis与MySQL的数据同步
【10月更文挑战第21天】本文介绍了 Redis 与 MySQL 数据同步的原因及实现方式。同步的主要目的是为了优化性能和保持数据一致性。实现方式包括基于数据库触发器、应用层双写和使用消息队列。每种方式都有其优缺点,需根据具体场景选择合适的方法。此外,文章还强调了数据同步时需要注意的数据一致性、性能优化和异常处理等问题。
|
27天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
106 2
|
1月前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
48 6
|
15天前
|
NoSQL 关系型数据库 MySQL
Tomcat、MySQL、Redis最大支持说明
综上所述,Tomcat、MySQL、Redis的并发处理能力均非固定值,而是通过合理的配置与优化策略,结合系统硬件资源,共同决定了它们在实际应用中的表现。开发者应根据应用的具体需求和资源条件,对这些组件进行细致的调优,以达到最佳性能表现。
28 0
|
19天前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
34 0
|
1月前
|
缓存 NoSQL 关系型数据库
MySQL与Redis缓存一致性的实现与挑战
在现代软件开发中,MySQL作为关系型数据库管理系统,广泛应用于数据存储;而Redis则以其高性能的内存数据结构存储特性,常被用作缓存层来提升数据访问速度。然而,当MySQL与Redis结合使用时,确保两者之间的数据一致性成为了一个重要且复杂的挑战。本文将从技术角度分享MySQL与Redis缓存一致性的实现方法及其面临的挑战。
91 2

推荐镜像

更多