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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
javascript实现连续赋值
2015/08/10 Javascript
Json解析的方法小结
2016/06/22 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
jQuery操作cookie
2016/08/08 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
python显示生日是星期几的方法
2015/05/27 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
中秋节超市促销方案
2014/01/30 职场文书
医学求职信
2014/05/28 职场文书
无私奉献演讲稿
2014/09/04 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
检讨书范文
2019/04/16 职场文书