PHP+MariaDB数据库操作基本技巧备忘总结


Posted in PHP onMay 21, 2018

本文实例总结了PHP+MariaDB数据库操作基本技巧。分享给大家供大家参考,具体如下:

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

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

<?php
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . '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的最基本操作方法。

1、创建数据库、表和用户。

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;

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

PHP+MariaDB数据库操作基本技巧备忘总结 PHP+MariaDB数据库操作基本技巧备忘总结

3、注册和登录的代码:

register_do.php

<?php
  $username = $_POST['username'];
  $password = $_POST['password'];
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . 'Connect DB error';
    exit;
  }
  $query = "select * from tbl_user where username = '" . $username . "'";
  echo '<p>' . $query;
  $result = $db->query($query);
  if ($result)
  {
    echo '<p>' . 'The user '. $username .' exist';
    echo '<p>' . '<a href="register.html" rel="external nofollow" rel="external nofollow" >Back to register</a>';
  }
  else
  {
    $query = "insert into tbl_user values ('". $username ."', '". $password ."')";
    echo '<p>' . $query;
    $result = $db->query($query);
    if ($result)
    {
      echo '<p>' . '<a href="register.html" rel="external nofollow" rel="external nofollow" >Register successful</a>';
    }
  }
?>

login_do.php

<?php
  $username = $_POST['username'];
  $password = $_POST['password'];
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . 'Connect DB error';
    exit;
  }
  $query = "select * from tbl_user where username = '" . $username . "' and password = '" . $password . "'";
  echo '<p>' . $query;
  $result = $db->query($query);
  if ($result->num_rows)
  {
    echo '<p>' . '<a href="login.html" rel="external nofollow" rel="external nofollow" >Login successful</a>';
  }
  else
  {
    echo '<p>' . '<a href="login.html" rel="external nofollow" rel="external nofollow" >Login failed</a>';
  }
?>

userlist.php

<?php
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . 'Connect DB error';
    exit;
  }
  echo '<p>' . 'All user as follows:';
  $query = "select * from tbl_user order by username";
  if ($result = $db->query($query))
  {
    while ($row = $result->fetch_assoc())
    {
      echo '<p>' . 'Username : ' . $row['username'] . '  <a href="userdelete.php?username=' . $row['username'] . '" rel="external nofollow" >delete</a>';
    }
  }
?>

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

PHP+MariaDB数据库操作基本技巧备忘总结

5、删除用户的代码:

userdelete.php

<?php
  $username = $_GET['username'];
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . 'Connect DB error';
    exit;
  }
  $query = "delete from tbl_user where username = '" . $username . "'";
  echo $query;
  if ($result = $db->query($query))
  {
    echo '<p>' . 'Delete user ' . $username . ' successful';
  }
  else
  {
    echo '<p>' . 'Delete user ' . $username . ' failed';
  }
  echo '<p>' . '<a href="userlist.php" rel="external nofollow" >Back to user list</a>';
?>

Prepare预处理

1、图书添加的页面如下图所示(bookadd.html):

PHP+MariaDB数据库操作基本技巧备忘总结

2、建表脚本如下:

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;

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

<?php
  $isbn = $_POST['isbn'];
  $title = $_POST['title'];
  $author = $_POST['author'];
  $price = $_POST['price'];
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . '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 '<p>' . 'Affect rows is ' . $stmt->affected_rows;
  echo '<p>' . '<a href="booklist.php" rel="external nofollow" >Go to book list page</a>';
?>

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

<?php
  $db = new mysqli('localhost', 'root', 'admin', 'test');
  if (mysqli_connect_errno())
  {
    echo '<p>' . '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 . '<p>';
    echo 'Title : ' . $title . '<p>';
    echo 'Author : ' . $author . '<p>';
    echo 'Price : ' . $price . '<p>';
    echo '<p>' . '-----------------------------' . '<p>';
  }
?>

5、显示的页面如下图所示:

PHP+MariaDB数据库操作基本技巧备忘总结

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
fgetcvs在linux的问题
Jan 15 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
php中opendir函数用法实例
Nov 15 PHP
php数组使用规则分析
Feb 27 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
PhpStorm本地断点调试的方法步骤
May 21 #PHP
PHP自动识别当前使用移动终端
May 21 #PHP
PHP连接MySQL数据库并以json格式输出
May 21 #PHP
PHP 访问数据库配置通用方法(json)
May 20 #PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 #PHP
windows环境下使用Composer安装ThinkPHP5
May 18 #PHP
PHP实现登录验证码校验功能
May 17 #PHP
You might like
php curl模拟post请求小实例
2013/11/13 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
python mysql断开重连的实现方法
2019/07/26 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
英国行业制服供应商:Alexandra
2019/09/14 全球购物
销售经理工作职责范文
2013/12/03 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
电工技术比武方案
2014/05/11 职场文书
安全环保标语
2014/06/09 职场文书
车间质检员岗位职责
2015/04/08 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android