1 /*php之sql注入 2 3 浏览器通过特殊的数据,影响了sql的执行,称之为sql注入。 4 '# 注释后边的内容 5 '--同上 6 ' or 1 or ' 直接登录 7 8 字符转义 9 转义函数:mysql扩展提供的函数:mysql_real_escape_string(转义的数据) 10 用于将参与到sql执行的数据,进行实施安全转义。 11 12 在数据库操作层加入 用户传入的sql语句并加以过滤,在进行数据库操作,以此防止用户的不确定性数据影响了sql的查询。 13 */ 14 15 /* 16 PDO 17 类似于,mysql的扩展。也是操作mysql服务器的方式。 18 随着php的发展,php认为pdo才是操作数据的合理方式。 19 20 PDO:PHP DATA OBJECT 21 基于面向对象语法完成操作。 22 23 在使用pdo之前要在php.ini文件中开启 extension=php_pdo_mysql.dll 24 扩展开启。 重启服务器,就可以在phpinfo.php中查询是否开启啦。 25 26 27 创建一个数据库连接的PDO实例 28 PDO:__construct 创建一个表示数据库连接实例 29 PDO::__construct(string $dsn [,string $username [,string passowrd [,array options]]]) 30 31 dsn:数据源名称 data source name,包含了请求连接到数据库的信息。。 32 username 毋庸置疑 就是用户名啦, 33 password 密码。 34 driver_options 35 一个具体驱动的连接选项的键=>值 数组。 36 返回值:成功则返回一个PDO对象。 37 错误/异常 38 如果试图连接请求的数据库失败,则pdo::__construct抛出一个pdo异常(PDOException) 39 */ 40 <?php 41 $dsn = 'mysql:host=127.0.0.1; port=3306; dbname=mytest'; 42 $username='root'; 43 $password='root'; 44 $options=array( 45 //属性初始化命令 46 PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8' //初始化数据库编码 47 ); 48 49 //connect 50 $pdo = new PDO($dsn, $username, $password, $options); 51 52 $sql = "SELECT * FROM `article`"; 53 $result = $pdo->query($sql); //$result 是一个结果集对象 object(PDOStatement) 54 55 $sql = "DELETE FROM `article` WHERE `id` =1"; 56 //返回受影响的记录 57 $result = $pdo->exec($sql); 58 59 $result->fecthAll(PDO::FETCH_ASSOC); //多条数据的查询 60 $result->fetch(); //单条记录的查询 61 fetchColumn(); //获取单个值查询 62 63 //当实例化完PDO对象,pdo就自动完成数据库连接。 64 /* 65 执行sql(结构化查询语言) 66 67 PDO对象的方法: 68 结果集对象: query() ; 查询类:select,show, desc 69 受影响的记录数:exec() ; 非查询类:insert,update, delete,表操作,库操作 70 71 只要是执行失败(sql出错),都返回false 72 73 操作结果集对象 74 为了获取最终的数据。使用结果集对象的方法来完成。 75 获取全部数据: 76 二维数组:fetchAll() 77 一维数组:fetch 78 字符串数据:fetchColumn() 79 80 可以在fetchall和fetch中使用参数: 81 PDO::FETCH_ASSOC ,PDO::FETCH_NUM , PDO::FETCH_BOTH的方式, 82 获取,关联数组,索引数组,两者都。 83 84 PDO对象的常用方法 85 $pdo->query(); 86 $pdo->exec(); 87 $pdo->errorCode();// 错误状态码 88 $pdo->errorInfo();//错误信息 数组 89 执行失败返回false 90 91 具体的错误状态码查询手册 92 $pdo->lastInsertID() //获取最新生成的auto_increnement()的字段值,最新更新的id 93 $pdo->quote(); //转义数据,并使用引号包裹。 94 因此,在使用pdo执行sql时,应该使用上面的方法进行sql语句过滤,防止sql注入, 95 sql-injection 96 PDO事务处理 97 $pdo->beginTransaction(); //开启事务 98 $pdo->rollback(); //事务回滚 99 $pdo->commit(); //事务提交 100 $pdo->inTranaction(); //判断是否处于事务中。 101 102 */