mysql预编译处理(mysqli、PDO)

DML语句预编译:

MysqLi:

<?php

	$mysqli = new mysqli("localhost","root","root","dbname");
	$mysqli->query("set names utf8");
	$sql = 'insert into user(id,name,age,email) values (?,?,?,?)';
	$mysqli_stmt = $mysqli->prepare($sql);

	$id = 2;
	$name = 'kung';
	$age = 28;
	$email = '[email protected]';

	$mysqli_stmt->bind_param('isis',$id,$name,$age,$email);

	$res = $mysqli_stmt->execute();

	if(!$res){
		echo 'error'.$mysqli_stmt->error;
		exit;
	}else{
		echo 'ok';
	}

	$id = 3;
	$name = 'xiaoyu';
	$age = 28;
	$email = '[email protected]';

	$mysqli_stmt->bind_param('isis',$id,$name,$age,$email);
	$res = $mysqli_stmt->execute();

	if(!$res){
		echo 'error'.mysqli_stmt->error;
		exit;
	}else{
		echo 'ok';
	}
?>

PDO:

<?php
	$dns = 'mysql:dbname=dbname;host=127.0.0.1';
	$user = 'root';
	$password = 'root';
try{
	$pdo = new PDO($dns,$user,$password);
} catch(PDOException $e){
	echo $e->getMessage();
}
	$pdo->query("set names utf8");

	$sql = 'inser into user values(:id,:name,:age,:email)';
	$pdo_stmt = $pdo->prepare($sql);

	$id = 2;
	$name = 'kung';
	$age = 27;
	$email = '[email protected]';

	$pdo_stmt->bindParam(':id',$id);
	$pdo_stmt->bindParam(':name',$name);
	$pdo_stmt->bindParam(':age',$age);
	$pdo_stmt->bindParam(':email',$email);
	$pdo_stmt->execute();
?>

DQL语句预编译:

mysqli:

<?php
	$mysqli = new mysqli("localhost","root","root","dbname");
	$mysqli->query("set names utf8");
	$sql = " select id,name from user where id > ?";
	$mysqli_stmt = $mysqli->prepare($sql);

	$id = 1;
	$mysqli_stmt->bind_param('i',$id);
	$mysqli_stmt->bind_result($id,$name);
	$mysqli_stmt->execute();

	while($mysqli_stmt->fetch()){
		echo $id.'--'.$name;
	}

	$mysqli_stmt->close();
	$mysqli->close();
?>
时间: 2024-10-17 21:02:28

mysql预编译处理(mysqli、PDO)的相关文章

PHP中对mysql预编译查询语句的一个封装

原文地址:http://chen-shan.net/?p=474 为了防止sql注入,我们都使用过mysqli这个类,但是每次都需要绑定参数,绑定结果等,比较麻烦,所以可以把这些重复的语句封装成一个函数. 一.封装前. 传统的一个预编译方式的”select”查询代码: $id = "1"; $name = "test_name"; $db_obj = new mysqli("localhost", "db_user", &qu

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

Mysqli的预编译机制处理批量数据过程

mysqli增强,还有一部分是对事物处理机制和预编译机制的增加,其实这两者都是为安全和执行效率着想的,这里主要说一下mysqli的预编译机制. 所谓的预编译,并不是在php的内核进行编译,而是数据库管理系统进行预编译,由于用于批量数据,说白了就是把一部分固定的数据格式先在mysql上面进行一次编译,编译之后就不在对其进行再次编译,我们要做的就是,向编译的占位符(就是数据占位)添加数据,之后发送,这样的话,大大的减少了编译次数,提高了批处理的效率. 下面是一段简单的示例代码: <?php $mys

PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)

1.和mysql扩展库的区别: (1   安全性.稳定性更高 (2  提供了面向对象和面向过程两种风格 2.php.ini  中的  extension=php_mysqli.dll 解除封印 3.面向对象:查询列表 1 <?php 2 3 //mysqli 操作数据(面向对象风格) 4 5 #1.创建Mysql对象 6 7 $mysqli=new MySQLi("127.0.0.1","root","daomul","test&

测试mysql的sql语句预编译效果

玩Oracle的都比较关注shared pool,特别是library cache,在使用了绑定变量(预编译sql)之后确实能得到很大的性能提升.现在在转Mysql之后特别是innodb很多东西都还能和Oracle对得上号的,就像innodb_buffer_pool_size类似于Oracle的database buffer cache,innodb_log_buffer_size类似于redo log buffer,但是innodb_additional_mem_pool_size仅仅类似于s

87)PHP,PDO的预编译技术

(1) 比如以下的语句: 1 insert into biao1 values('李宁','100'): 2 insert into biao1 values('安踏','100'): 3 insert into biao1 values('匹克','100'): 4 insert into biao1 values('乔丹','100'): 5 insert into biao1 values('耐克','100'): 6 insert into biao1 values('阿迪','100'

Mysql的预编译和批处理

MySQL的预编译功能 预编译的好处 大家平时都使用过JDBC中的PreparedStatement接口,它有预编译功能.什么是预编译功能呢?它有什么好处呢? 当客户发送一条SQL语句给服务器后,服务器总是需要校验SQL语句的语法格式是否正确,然后把SQL语句编译成可执行的函数,最后才是执行SQL语句.其中校验语法,和编译所花的时间可能比执行SQL语句花的时间还要多. 如果我们需要执行多次insert语句,但只是每次插入的值不同,MySQL服务器也是需要每次都去校验SQL语句的语法格式,以及编译

关于mysql使用prepare关键字预编译语句后是否使用deallocate的区别

下图是mysql数据库中某一数据库,里面有一张user表. 1.新建查询之后,下图展示的使用prepare预编译查询结果(注意:使用了DEALLOCATE关键字删除预编译语句) 2.再次运行刚才的预编译语句aa, 结果出现错误.原因是:之前使用deallocate已经删除了预编译语句. 3.这一次不使用deallocate关键字删除预编译语句. 再一次调用已经预编译过的aa语句. 这一次仍然可以使用该语句. 4.使用deallocate删除该语句. 再次运行已删除语句. 结果再次报错.说明dea