关于MYSQL预处理技术的一些体会
关于MYSQL预处理技术的一些体会
先来看传统的操作数据库的方法。传统的操作数据库方法有两种:
先写一条sql语句,然后通过mysqli->query($sql)去操作数据库(笔者此处使用的是mysqli扩展库)。这样操作 并不会有什么大的错误,但是当你要插入上千条上万条数据呢?难道也还是要这样写一 条sql语句然后再操作一下数据库?那有人会说, 好办嘛 ,用mysqli自带的操作多条sql语句的方法,即第二种方法。
mysqli->multi_query($sql),这是操作多条sql语句的方法,如下:
如果你认为这样就可以完全解决问题,那么你就错了,让我们接下来看一看MySQL数据库执行sql语句的原理吧
从上图可以看出,无论我们是发送一条sql语句还是发送多条sql语句,数据库都要对其一一的进行编译,那么当数据达到一定量之后,数据库的开销就必然很大。那怎样解决这个问题?此时就引入了预处理技术的概念。
下面我们来看一段预处理技术的代码:
首先我们来看
$sql = "insert into student_info(name,age,sex,studentNo,grade) values (?,?,?,?,?)";
$mysqli_stmt->execute();这句代码就是将数据传递给数据库了。
使用预处理数据查询数据库
代码如下:
可以看出,查询与插入相比多了
这样一句代码,那么这句代码是什么意思呢?
可以想象,查询数据库的时候,数据库必然会返回一个结果集,那么如果你想取得该结果的一些数据,那么就必须加上这句话。那么,这些参数又是什么意思呢?
看看这句sql语句,你会发现bind_result里面的参数一一对应于sql语句当中你要查询的字段(name,sex,age),当然,bind_result里面的参数可以不与sql语句的字段名字相同,但是我们通常推荐这样做。
多的不说,上图:
可以这样理解:$name,$sex,$age是引用传递,他们相当于指针,分别指向结果集的第一行的列地址,每执行一次while语句,指针便向下移动
这样,便可以打印出每一行的数据了 ,结果如下:
同时,那三个关闭别忘记了,重中之重。