MySQL的预编译是指在创建数据库对象时就将指定的SQL语句编译完成,这时SQL语句已经被MySQL解析、审查,所以相对传统的执行方式(每处理一个SQL语句就要解析SQL语句、检查语法和语义),预编译方式在执行数据插入、更新或者删除操作的时候,执行效率更高。
预编译语句优点:
- 提高运行效率
- 防止SQL注入:因为预编译时预先已经将SQL的结构确定,在执行SQL语句时,结构不会发生改变。
PHP中MySQL的预编译具体操作方式
- 编译统一的结构
/*假定已经完成数据库初始化操作,数据库对象名:$pdo*/
$sql = "insert into team values (null, :team_name)";
$PDOStatement = $pdo->prepare($sql);
- 绑定数据到中间编译结果
$PDOStatement->bindValue(':team_name','国安');
- 执行
$result = $PDOStatement->execute();
完整操作代码
$username = 'root';
$password = '1234abcd';
$driver_options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
);
$pdo = new PDO($dsn, $username, $password, $driver_options);
//1.编译统一的结构
$sql = "insert into team values (null, :team_name)";
$stmt = $pdo->prepare($sql);
$data_list = array(
array('name'=>'国安'),
array('name'=>'绿地'),
array('name'=>'恒大'),
array('name'=>'建业'),
array('name'=>'鲁能'),
array('name'=>'申花'),
);
foreach($data_list as $row) {
//2.绑定数据到中间编译结果
$stmt->bindValue(':team_name', $row['name']);
//3.执行
$result = $stmt->execute();
var_dump($result);
}
网友评论