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 相关文章推荐
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP缓存技术的使用说明
Aug 06 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
PHP加密技术的简单实现
Sep 04 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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 cookis创建实现代码
2009/03/16 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
PHP实现小偷程序实例
2016/10/31 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
基于JS实现快速读取TXT文件
2020/08/25 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
佳能英国官方网站:Canon UK
2017/08/08 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
2014年消防工作实施方案
2014/02/20 职场文书
企业节能减排实施方案
2014/03/19 职场文书
公司保密承诺书
2014/03/27 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
详解python网络进程
2021/06/15 Python