Atitit php pdo的api使用 目录 1.1. PHP PDO简介 1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1 2. 其他设置 2 2.1. )、P

Atitit php pdo的api使用

 

目录

1.1. PHP PDO简介 1

1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1

2. 其他设置 2

2.1. )、PDO有三种错误处理方式:PDO::ERRMODE_EXCEPTION 2

2.2. 返回的字段名称大小写处理PDO::ATTR_CASE 2

2.3. 指定数据库返回的NULL值在PHP中对应的数值DO::ATTR_ORACLE_NULLS 2

2.4. Tisye.php 2

2.5. tisye mng list.php 查询 3

 

 

    1. PHP PDO简介

PDO (PHP Data Object) 是 PHP5 的新特性,在 PHP6 中,PDO 将是默认的数据库处理方式,所以我们有必要学习一下 PDO。

在 PHP5 以前的版本中,对于数据库的处理通常是通过一些扩展来支持的。如 windows 版本下的 php_mysql.dll、php_mssql.dll 这些扩展分别用于处理 mysql 和 MS SQL Server 等数据库。现在,POD 的出现,为我们提供了统一的数据库处理接口。

PDO 是面向对象方式处理数据库连接操作的,其预定义了以下 3 个类:

  1. PDO:代表一个 PHP 和数据库之间的连接。
  2. PDOStatement:代表一条预处理语句以及语句执行后的联合结果集(associated result set)。
  3. PDOException:返回PDO触发的错误。

常用的数据库操作方法如下:

  • PDO::query():主要是用于有记录结果返回的操作,如 SELECT 操作。
  • PDO::exec():主要是针对没有结果集合返回的操作,比如 INSERT、UPDATE、DELETE 等操作,它返回的结果是当前操作影响的列数。
  • PDO::prepare():主要是用于预处理操作,需要通过 PDOStatement::execute() 来执行预处理里面的 SQL 语句,这个方法可以绑定参数,功能强大,相对比较复杂。

 

 

    1. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 

默认不是长连接,需要在最后加如下参数

$dbh = new PDO("mysql:host=localhost;dbname=db_demo","root","password","array(PDO::ATTR_PERSISTENT => true)");  
$dbh = null; //(释放)  

 

 

  1. 其他设置

 

 

    1. )、PDO有三种错误处理方式:PDO::ERRMODE_EXCEPTION
  • PDO::ERRMODE_SILENT不显示错误信息,只设置错误码
  • PDO::ERRMODE_WARNING显示警告错
  • PDO::ERRMODE_EXCEPTION抛出异常

可通过以下语句来设置错误处理方式为抛出异常

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

当设置为PDO::ERRMODE_SILENT时可以通过调用 errorCode() 或 errorInfo()来获得错误信息,当然其他情况下也可以。 

    1. 返回的字段名称大小写处理PDO::ATTR_CASE
  1. 、因为不同数据库对返回的字段名称大小写处理不同,所以PDO提供了PDO::ATTR_CASE设置项(包括PDO::CASE_LOWER,PDO::CASE_NATURAL,PDO::CASE_UPPER),来确定返回的字段名称的大小写。
    1. 指定数据库返回的NULL值在PHP中对应的数值DO::ATTR_ORACLE_NULLS

3)、通过设置PDO::ATTR_ORACLE_NULLS类型(包括PDO::NULL_NATURAL,PDO::NULL_EmpTY_STRING,PDO::NULL_TO_STRING)来指定数据库返回的NULL值在PHP中对应的数值。

 

  1. 、PDO常用方法及其应用
  • PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作
  • PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作
  • PDO::prepare() 主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大(防止sql注入就靠这个)
  • PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID
  • PDOStatement::fetch() 是用来获取一条记录
  • PDOStatement::fetchAll() 是获取所有记录集到一个集合
  • PDOStatement::fetchColumn() 是获取结果指定第一条记录的某个字段,缺省是第一个字段
  • PDOStatement::rowCount() :主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效

 

    1. Tisye.php

 

<?php

error_reporting(E_ALL^E_NOTICE);

parse_str$_SERVER'QUERY_STRING' ],$parr);print_r($parr);

 

  $json_str=json_encode($parr);

file_put_contents("C:\\data\\tisyi\\".time(), $json_str);

 print ('ok');

// echo "Hello world!<br>";

$aa=333;

 

$mysql_conf = array(

   );

$pdo = new PDO("pgsql:host=" . $mysql_conf['host'] . ";port=5432;dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象

$pdo->exec("set names 'utf8'");

$sql = "select * from user where name = ?";

 

//sprintf("%s love %s.", "a","b");

// use exec() because no results are returned

$sql = "INSERT INTO tisye提现表 (org开户机构, acc账户, name名字,amt金额)VALUES ('%s', '%s', '%s','%s') ";

print_r($_GET);

$sql=sprintf($sql,$_GET['org开户机构'],$_GET['acc'],$_GET['name'],$_GET['amt金额']);

print_r($sql);

 print_r$pdo);

//try{

  $pdo->exec($sql);

  echo "New record created successfully";

 

// }

// catch(PDOException $e)

//     {

//     echo $sql . "<br>" . $e->getMessage();

//     }

 

?>

 

    1. tisye mng list.php 查询

 

<?php

//tisye mng list.php

error_reporting(E_ALL^E_NOTICE);

parse_str$_SERVER'QUERY_STRING' ],$parr);

//print_r($parr);

 

$mysql_conf = array(

   );

$pdo = new PDO("pgsql:host=" . $mysql_conf['host'] . ";port=5432;dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象

$pdo->exec("set names 'utf8'");

$sql = "select * from tisye提现表 where 1=1";

 

$sth = $pdo->query($sql);

$rows = $sth->fetchAll();

 

echo json_encode($rows);

 

?>

 

 

如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析! - 52php - 博客园.html

posted @ 2019-12-12 16:55  attilaxAti  阅读(41)  评论(0编辑  收藏  举报