PHP基础之与MySQL那些事

这篇文章会对PHP的MySQL扩展库,MySQLI的扩展库,SQL批量执行,事务控制等等进行一些简单的讲解。

MySQL扩展

PHP中MySQL扩展,虽然因为安全的原因,在PHP5.6及往上不在支持MySQL扩展库,但是还是要学习的,通过编写案例的方式来讲解。

案例

先说下操作数据库的大体思路吧,就是先获取连接-》选择数据库-》设置操作编码-》发送sql指令-》对返回的结果进行处理-》释放资源,断开连接。案例是一个在线词典查询。下面是创建表的sql语句:

create database worddb create table words( id int primary key auto_increment, enword varchar(32) not null, chword varchar(256) not null ); insert into words(enword,chword) values ('boy','男孩') insert into words(enword,chword) values ('school','学校')

因为是练习,所以就插入了两条数据。接下来就是编写SQL工具类,代码如下:

<?php class SqlTool{ private $conn; private $host="localhost"; private $user="root"; private $password="XFAICL1314"; private $db="worddb"; //初始化 function SqlTool(){ $this->conn=mysql_connect($this->host,$this->user,$this->password); if (!$this->conn){ die("连接数据库失败!".mysql_error()); } mysql_select_db($this->db,$this->conn); mysql_query("set names utf8"); } //完成select function execute_dql($sql){ $res=mysql_query($sql) or die(mysql_error()); return $res; } //完成insert,update,delete function execute_dml($sql){ $b=mysql_query($sql,$this->conn); if (!$b){ return 0; }else{ //因为有些情况执行成功,但没有行数影响,所以在判断一下。 if (mysql_affected_rows($this->conn)>0){ return 1; }else{ return 2; } } } } ?>

之后就是前端页面的编写了,代码如下,有点丑:

<html> <head> <title>在线词典</title> <meta http-equiv="content-type" charset="UTF-8"> </head> <body> <center><h1>字典</h1></center> <h2>查询英文</h2> <form action="wordprocess.php" method="post"> 请输入英文:<input type="text"> <!--为了区分两个表单,这里选择用隐藏域的方式--> <input type="hidden" value="search1"> <input type="submit" value="提交"> </form> <h2>查询中文</h2> <form action="wordprocess.php" method="post"> 请输入中文:<input type="text"> <!--为了区分两个表单,这里选择用隐藏域的方式--> <input type="hidden" value="search2"> <input type="submit" value="提交"> </form> </body> </html>

接下来就是后端逻辑代码了,如下:

<?php //引入工具类 require_once 'SqlTool.class.php'; header("Content-type:text/html;charset=utf-8"); if (isset($_POST['type'])){ $type=$_POST['type']; }else{ echo "查询失败<br>"; echo "<a href='http://www.likecs.com/wordVeiw.php'>回到主页面</a>"; } if ($type=="search1") { if (isset($_POST[yingyu])) { $en_word = $_POST[yingyu]; } else { echo "请输入"; echo "<a href='http://www.likecs.com/wordVeiw.php'>回到主页面</a>"; } $sql = "select chword from words where enword='" . $en_word . "' limit 0,1"; //查询,调用sql工具类 $SqlTool = new SqlTool(); $res = $SqlTool->execute_dql($sql); if ($row = mysql_fetch_assoc($res)) { echo $en_word . "对应的中文为" . $row['chword']; } else { echo "查询没有这个词条.<br>"; echo "<a href='http://www.likecs.com/wordVeiw.php'>回到主页面</a>"; } //释放资源 mysql_free_result($res); }else if($type == "search2") { if (isset($_POST[hanyu])) { $ch_word = $_POST[hanyu]; } else { echo "请输入"; echo "<a href='http://www.likecs.com/wordVeiw.php'>回到主页面</a>"; } $sql = "select enword from words where chword like '%" . $ch_word . "%'"; //查询,调用sql工具类 $SqlTool = new SqlTool(); $res = $SqlTool->execute_dql($sql); if (mysql_num_rows($res) != 0) { while ($row = mysql_fetch_assoc($res)) { echo "<br>".$ch_word . "对应的英文为" . $row['enword']; } } else { echo "查询没有这个词条.<br>"; echo "<a href='http://www.likecs.com/wordVeiw.php'>回到主页面</a>"; } //释放资源 mysql_free_result($res); } ?>

现在来测试一下吧,首先打开前端页面,如下图:

PHP基础之与MySQL那些事


接下来输入boy进行查询,结果如下,查询成功:

PHP基础之与MySQL那些事


因为是案例,所以直接将前端传过来的参数没有做任何处理直接拼接到SQL语句中,这样是非常危险的!!,存在SQL注入攻击,现在我来演示一下,在输入框中输入:
boy' and updatexml(1,concat(0x7e,(select user()),0x7e),1)#
结果如下图直接报出使用者!!

PHP基础之与MySQL那些事


所以在开发功能时,要秉持“外部参数皆不可信原则”进行开发

MYSQLI扩展

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsjpd.html