PDO全称是PHP Data Object(PHP数据对象),是PHP连接数据库中的一个扩展,目前得到普遍使用。PDO主要解决的问题是为不同的数据库提供一个统一的数据访问接口和操作层。为实现系统在跨数据库平台的开发及迁移等问题上提供了较好的解决方案。PDO 对象的获取
在PDO中,要建立与数据库的连接需要实例化PDO的构造函数。PDO构造函数语法如下:
PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
通过PDO构造函数来连接数据库:
<span> 1</span> <?<span>php </span><span> 2</span> <span>$dbms</span> = 'mysql'<span>; </span><span> 3</span> <span>$dbName</span> = 'dormitory'<span>; </span><span> 4</span> <span>$host</span> = 'localhost'<span>; </span><span> 5</span> <span>$user</span> = 'root'<span>; </span><span> 6</span> <span>$pwd</span> = ''<span>; </span><span> 7</span> <span>$dsn</span> = "<span>$dbms</span>:host=<span>$host</span>;dbname=<span>$dbName</span>"<span>; </span><span> 8</span> <span>try</span><span> { </span><span> 9</span> <span>$pdo</span> = <span>new</span> PDO(<span>$dsn</span>, <span>$user</span>, <span>$pwd</span><span>); </span><span>10</span> <span>echo</span> '连接成功!'<span>; </span><span>11</span> } <span>catch</span> (<span>Exception</span> <span>$e</span><span>) { </span><span>12</span> <span>echo</span> <span>$e</span>->getMessage() . "<br>"<span>; </span><span>13</span> <span>} </span><span>14</span> ?>
3种方法执行sql语句
执行sql语句的方法有:exec(),query(),prepare()+execute()。
1、exec()方法用于执行input,delete,update语句,返回值为受影响的行数;
2、query()方法用于执行select语句,返回值为一个二位数组;
3、预处理语句prepare()+execute(),可以用于执行input,delete,update,select语句,
可以把预处理语句看成想要运行的SQL的一种编译过的模板,他可以使用变量参数进行定制,做到查询时只需解析一次就可以执行多次;
如果应用程序只使用预处理语句,可以确保不会发生SQL注入。
PDO::prepare()返回值为一个PDOStatement对象,对象的内容为prepare()方法里面的参数;
PDO::execute(),检查sql是否可执行,返回值为一个boolean类型。
从预处理语句的返回值也可以看出,他并没有真正的执行sql语句,而是检查sql的正确性,准备好执行的状态,等到需要用到结果集的时候再执行。
<span> 1</span> <?<span>php </span><span> 2</span> <span>include_once</span> './pdo_db_conn.php'<span>; </span><span> 3</span> <span>try</span><span> { </span><span> 4</span> <span>$query</span> = "select * from building"<span>; </span><span> 5</span> <span>//</span><span> $result = $pdo->query($query);//结果为一个二维数组</span> <span> 6</span> <span>$result</span> = <span>$pdo</span>->prepare(<span>$query</span><span>); </span><span> 7</span> <span>var_dump</span>(<span>$result</span><span>); </span><span> 8</span> <span>$flag</span> = <span>$result</span>-><span>execute(); </span><span> 9</span> <span>var_dump</span>(<span>$flag</span><span>); </span><span>10</span> } <span>catch</span> (<span>Exception</span> <span>$e</span><span>) { </span><span>11</span> <span>echo</span> <span>$e</span>-><span>getMessage(); </span><span>12</span> <span> } </span><span>13</span> ?>
返回值:
object(PDOStatement)[2]
public 'queryString' => string 'select * from building' (length=22)
boolean true
3种方法获取结果集
获取结果集的方法有fetch(),fetchAll(),fetchColumn();
fetch()方法获取结果集中的下一行,是一个数组;
fetchAll()方法获取结果集中的所有行,是一个数组;
fetchColumn()方法获取结果集中下一行指定的列的值。
三个方法的调用对象类型为PDOStatement对象类型,一般是在预处理语句之后执行
3种方法捕获sql语句中的错误的方式
当执行sql语句出现错误是,可以根据设置的错误提示方式,来决定显示错误的方法。
错误提示方式有:
1、PDO::ERRMODE_SILENT
默认方式,出现错误时程序继续执行,无错误提示。
2、PDO::ERRMODE_WARNING
出现错误时会继续执行,错误的部分会提示警告信息。
3、PDO::ERRMODE_EXCEPTION
出现错误时不会继续执行,错误的部分会提示异常信息。
2种方法获取程序错误信息
当执行sql语句出现错误是(访问数据库部分,对结果集的遍历错误不会提示),可以通过errorCode(),errorInfo()两个方法在后台输出错误信息,当sql语句是通过预编译执行的,这两个方法不适用。当在程序中调用errorCode()方法后,返回值为00000(5个0)时,表示程序没有错误,但返回其他5个字符时,表示程序是有错误的,这时可以通过调用errorInfo()方法来查看具体错误的信息。
这个跟PHP的版本有一点点关系的。比如,PHP5.2要开启php_pdo.dll和php_pdo_mysql.dll两个,php5.4则只需要开启php_pdo_mysql.dll这一个就行了
$s_sql = select username,password from t_table where username=? and password=?;
$sth = $dbh->prepare($s_sql);
$result = $sth->execute(array($username,$password));
$result = $sth->fetchAll();//如果不存在返回的是空的数组,如果存在就是用户名+密码