- 浏览: 116407 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
keynescao:
兄弟写得不错,受教了。
ContentProvider简介 -
jackhao168:
好
ContentProvider简介
mysqli函数库支持prepared语句的使用。它们对于在执行大量具有不同数据的相同查询时,可以提高执行速度。它们也可以免受sql注射风格(injection-style)的攻击。
prepared语句的基本思想是可以向mysql发送一个需要执行的查询模板,然后再单独发送数据。我们可以向相同的prepared语句发送大量的相同数据;这个特性对批量处理的插入操作来说是非常有用的。
例如一个插入操作,可以使用prepared语句,如下所示:
$query = "insert into books values(?,?,?,?)";
$stmt = $db->prepare($query);
$stmt->bind_param("sssd",$isbn,$author,$title,$price);
$stmt->execute();
echo $stmt->affected_rows.' book inserted into database.';
$stmt->close();
下面,我们逐行分析以上代码。
当设置查询时,不是替换前面已经生成的变量,而是在每一段数据的位置设置问号。在这些问号的周围,不能再设置问号或其他分界符号。
第二行是调用 $db->prepare(),在过程版本中,是通过mysqli_stmt_prepare()函数实现的。这一行将构建一个语句对象或需要用来完成实际处理的资源。
语句对象有一个bind_param()方法。(在过程版本中,是mysqli_stmt_bind_param()函数)。
bind_param()的用途是告诉php那些变量应该被问号所替换。第一个参数是一个格式化字符串,与printf()使用的格式化字符串不同。在这里,所传递的值意味着4个参数分别是字符串、字符串、字符串和双精度。格式化字符串中的其他字符还有:i表示整数,b表示blob。在这个参数之后,必须列出与语句中的问号数量相同的变量。他们将依次被替换。
调用$stmt->execute()函数(在过程版本中是mysqli_stmt_execute()函数)将真正运行这个查询。我们可以访问受影响的行数并关闭这个语句。
那么prepared语句的作用如何呢?这里,一个优点是可以改变着4个绑定变量的值,并且在不用准备的情况下重新执行这个语句。这个功能对于循环执行批量插入操作来说是非常有用的。
与绑定参数一样,也可以绑定结果。对于select类型查询,可以使用stmt->bind_result()函数(或mysqli_stmt_bind_result()函数)提供希望填充结果列的变量列表。每次调用$stmt->fetch()函数(或者mysqli_stmt_fetch()函数)时,结果集下一行的列值将被填充到这些绑定变量中。例如,在前面介绍的图书搜索脚本中,可以使用:
$stmt->bind_result($isbn,$author,$title,$price);
将这四个变量绑定到将通过返回的4列。在调用如下语句后:
$stmt->execute();
可以在循环中调用:
$stmt->fetch();
发表评论
-
php返回HTTP状态码
2013-08-20 11:07 26450面试时很多人问我这个,记录一下 200是ok, 404 ... -
zend studio 安装aptana插件 以及对js代码的支持
2012-02-08 16:54 1547http://bbs.houdunwang.com/threa ... -
zend studio将tab键改为4个空格
2012-02-07 23:16 1267zend studio将tab键改为4个空格 -
调试变量,输出变量,DEBUG可用SMARTY的函数debug_print_var
2012-02-07 14:36 1123比如要调试数组$array {$array|@debug ... -
PHP时间戳函数总结一览
2012-01-31 22:15 733PHP语言中的函数有许多种,各种应用方式不同,实现的功能也不尽 ... -
php计算时间差/两个时间日期相隔的天数,时,分,秒.
2012-01-31 19:02 6081<?php function tim ... -
Eclipse\Zend Studio\EPP等基于Eclipse的IDE配色主题插件
2011-12-23 14:03 2946Eclipse\Zend Studio默认的白色编辑器配色主题 ... -
php中rename()函数的妙用
2011-12-13 19:00 794php中rename()函数的妙用 大家都知道 ... -
关于 Zend Studio 调试的环境
2011-11-18 17:27 948Zend Studio IDE 很强大,但是不能调 ... -
solr-1.4.1安装笔记
2011-11-06 02:30 1180Solr是一个基于Lucene java ... -
FCKeditor的PHP配置
2011-10-27 11:03 7761、下载FCKeditor 多国语言版 2、解压后为文件夹减 ... -
PHP 反射机制详解 以及插件架构实现
2011-09-12 01:12 11211。用途:该扩展分析php程序,导出或提取出关于类、方法、属性 ... -
PHP debug_backtrace() 函数 ,函数调用位置 ,定位
2011-09-10 00:52 2139PHP Error 和 Logging 函数 中的 ... -
php大括号的妙用
2011-08-12 17:19 729// Get the first character of ... -
Smarty3.0 配置方法及初步认识
2011-07-27 11:54 2532今天想通过用Smarty作一 ... -
php时间函数出错及解决方法 php date_default_timezone_set()函数用法
2011-07-04 14:10 1146php时间函数出错及解决 ... -
函数:set_time_limit()
2011-06-10 00:19 736set_time_limit 配置该页最久执行时间。 语 ... -
函数:get_cfg_var()
2011-06-10 00:17 807get_cfg_var 取得 PHP 的配置选项值。 语 ... -
Apache开启Rewrite环境
2011-05-24 14:15 830环境:系统 WindowsApache 2.2 加载Rewr ... -
PHP header() 使用心得
2011-05-10 11:40 978下面是关于header函数的 ...
相关推荐
描述中提到的"Wrapper for a PHP MySQL class, which utilizes MySQLi and prepared statements"进一步阐述了这个封装类的核心特性。预处理语句是MySQLi的一个重要功能,它能够防止SQL注入攻击,提高查询性能,并使...
mysqli 的优点有很多,例如:在面向对象接口、多语句执行、事务支持、prepared 语言支持、嵌入式服务以及调试能力等方面。 在连接方面,mysql 函数拥有非粘合连接功能,每一个请求或者响应都需要单独的发送 TCP ...
在 PHP 中使用 MySQL 预处理语句(Prepared Statements)是一种非常推荐的方法来执行数据库操作,特别是在涉及到用户输入的情况下。预处理语句通过将数据与 SQL 查询语句分离的方式帮助防止 SQL 注入攻击,这是...
1. 使用prepared statements:使用prepared statements可以防止SQL注入攻击,因为攻击者无法修改SQL语句。 2. 输入验证:对用户输入进行验证,可以防止攻击者输入恶意数据。 3. 输出编码:对输出结果进行编码,可以...
需要注意的是,在实际开发中,为了避免SQL注入等安全问题,应当使用预处理语句(prepared statements)进行数据库操作。同时,对于批量操作应当进行适当的异常捕获和处理,确保数据的一致性和操作的安全性。
PDO与MySQLi在性能上各有千秋,通常PDO在处理预处理语句(Prepared Statements)时能够带来更快的性能,特别是在客户端的预处理语句上。预处理语句是一种有效防止SQL注入的方式,它将SQL语句的结构与数据分开处理,...
在PHP的MySQLi扩展中,`mysqli_stmt_init()` 是一个非常重要的函数,它用于初始化预处理语句(Prepared Statements)的过程。预处理语句是一种提高数据库操作性能和安全性的方式,尤其是在执行多次相同或相似查询时...
预处理语句(Prepared Statements)的基本步骤如下: 1. **建立数据库连接**:通过`new MySQLi()`创建一个数据库连接对象,例如: ```php $mysqli = new MySQLi("localhost", "root", "root", "test"); ``` 2. ...
mysqli扩展库是PHP用来连接和操作MySQL数据库的一个强大扩展,相比传统的mysql扩展,mysqli提供了面向对象的编程接口,以及一些额外的功能,比如支持预处理语句(prepared statements)、存储过程等。这使得mysqli...
与早先的 MySQL 扩展相比,MySQLi 支持 MySQL 数据库的更多新特性,如面向对象接口、预处理语句(prepared statements)、事务处理等,同时对错误处理也提供了更好的支持。 在本实例中,详细讲解了一个名为 `db_...
两个扩展都可以执行相同的数据库操作,但是mysqli提供了额外的功能,比如面向对象的接口、预处理语句(prepared statements)、更复杂的事务控制和存储过程。预处理语句有助于防止SQL注入攻击,并且可以提高重复查询...
使用`mysql_real_escape_string()`函数时,有一个重要的注意事项:应该只对传入SQL语句的字符串参数使用该函数,而不是对整条SQL语句使用。如果对整条SQL语句使用`mysql_real_escape_string()`函数,可能会导致SQL...
1. 使用预处理语句(Prepared Statements):预处理语句能确保用户输入的数据不会被解析为 SQL 代码。在 PHP 中,可以使用 PDO(PHP Data Objects)或 MySQLi 扩展的预处理语句功能。 ```php $stmt = $pdo->prepare...
此外,`mysqli`还支持**预处理语句(Prepared Statements)**,这是一种安全高效的方式来执行SQL查询,可以防止SQL注入攻击。预处理语句允许开发者先定义SQL结构,然后多次绑定不同的参数执行,提高了代码的安全性和...
- **预编译语句**:对于重复执行的SQL,可以使用预编译语句( Prepared Statements),进一步提高性能并防止SQL注入。 通过熟练掌握上述技巧,开发者可以更高效地处理多表数据查询任务,提升PHP应用程序的性能。...
4. **MySQLi Prepared Statements**: MySQLi扩展提供了预处理语句,可以防止SQL注入攻击。例如: ```php $stmt = $mysqli->prepare('SELECT * FROM users WHERE id=?'); $stmt->bind_param('i', $id); $stmt->...
此外,对于大型系统,我们可能需要使用预编译语句( Prepared Statements)以提高性能和安全性,以及使用存储过程来封装复杂的业务逻辑。 了解了这个基本的事务控制实例后,开发者可以进一步研究mysqli扩展提供的...
1. **预处理语句(Prepared Statements)**:使用PDO或MySQLi扩展的预处理语句可以有效地防止SQL注入。预处理语句将查询结构与用户输入的数据分开,确保即使用户输入恶意代码,也无法改变查询的原始结构。 2. **...
- **安全性**:在实际应用中,为了防止SQL注入攻击,建议使用预处理语句(prepared statements)来执行SQL查询。这种方法可以有效防止恶意用户通过输入特殊的SQL代码来操控数据库。 - **错误处理**:在开发过程中,...
- 使用预编译的SQL语句(如PHP的PDO或MySQLi的 prepared statements),将参数与SQL语句分离,减少注入风险。 - 对用户输入进行严格的验证和过滤,避免特殊字符。 - 使用存储过程,限制直接SQL执行。 - 最小权限...