PDO中捕获SQL语句中的错误细分PHP
通过prepare和execute方法向数据库中添加数据,设置PDOStatement对象的errorCode属性,手动检测代码中的错误,具体步骤如下。
在PDO中捕获SQL语句中的错误有3种方案可以选择。
使用默认模式-PDO::ERRMODE_SILENT
在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作。
例通过prepare和execute方法向数据库中添加数据,设置PDOStatement对象的errorCode属性,手动检测代码中的错误,具体步骤如下。
创建index.php文件,添加form表单,将表单元素提交到本页。通过PDO连接MySQL数据库,通过预处理语句prepare()和execute()执行INSERT添加语句,向数据表中添加数据,并且设置PDOStatement对象的errorCode属性,检测代码代码中的错误。关键代码如下:
if($_POST['Submit']=="提交"&&&_POST['pdo']!=""){
$dbms='mysql';//数据库类型,对于开发者来说,使用不同的数据库,只需要改这个即可,不用记住那么多的函数
$host='localhost';//数据库主机名
$dbName='db_database16;';//使用数据库
$user='root';//数据库连接用户名
$pass='111';//对应的密码
$dsn="$dbms:host=$host:dbname=$dbName";
$pdo = new PDO($dsn,$user,$pass);//初始化一个PDO对象,就是创建了数据库连接对象$pdo
$query="insert into tb_pdo_mysqls(pdo_type,database_name;dates)values('".$_POST['pdo']."','"$_POST['databases']."','".$_POST['dates']."')";
$result=$pdo->prepare($query);
$result->execute();
$code=$result->errorCode();
if(empty($code)){
echo "数据添加成功!";
}else{
echo '数据库错误:
';
echo 'SQL Query.'.$query;
echo '
';
var_dump($result->errorlnfo());
echo '
';}
}
?>
在本实例中,在定义INSERT添加语句时,使用了错误的数据表名称tb_pdo_mysqls(正确名称是tb_pdo_mysql),导致输出结果如下所示。
什么是PDO
PDO概述
PDO是PHP Date Object(PHP 数据对象)的简称,它是与PHP5.1版本一起发行的,目前支持的数据库包括Firebird、FreeTDS、interbase、MYSQL、MS SQL Server、ODBC、Oracle、Postgre SQL、 SQLite和sybase。有了PDO,不必要使用mysql_*函数、oci_*函数或者mssql_*函数,也不必再为它们封闭数据库操作类,只需要使用PDO接口中的方法就可以对数据库进行操作。在选择不同的数据库时,只需要修改PDO的DSN(数据源名称)。
在PHP6中将默认使用PDO连接数据库,所有非PDO扩展将会在PHP6中被移除。该扩展提供PHP内置类PDO来对数据库进行访问,不同数据库使用相同的方法解决数据库连接不统一的问题。
PDO特点
PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与MySQL和MSSQL函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高效。
PDO将通过一种轻型、清晰、方便的函数,统一各种不同RDBMS库的共有特性,实现PHP脚本最大程度的抽象性和兼容性。
PDO吸取现有数据库扩展成功和失败的经验教训,利用PHP5的最新特性,可以轻松与各种数据库进行交互。
PDO扩展是模块化的,使用户能够在运行时为数据库后端加载驱动程序,而不必重新编译或重新安装整个PHP程序。例如,PDO_MySQL扩展会替代PDO扩展实现MySQL数据库API。还有一些用于Oracle、PostgreSQL、ODBC和Firebird的驱动程序,更多的驱动程序尚在开发。
安装PDO
PDO是与PHP5.1一起发行的,默认包含在PHP5.1中。由于PDO需要PHP5核心面向对象性的支持,因此其无法在PHP5.0之前的版本中使用。
默认情况下,PDO在PHP5.2中为开启状态,但是要启用对某个数据库驱动程序的支持,仍需要进行相应的配置操作。
在Linux环境下使用MySQL数据库,可以在configure命令中添加如下选项:
--with-pdo-mysql=/path/to/mysql/installation
在Windows环境下,PDO在php.ini文件中进行配置,如图所示。
要启用PDO,首先必须加载“extension=php_pdo.dll”,如果要想其支持某个具体的数据库,那么还要加载对应的数据库选项。例如,要支持MySQL数据库,则需要加载“extension=php_pdo_mysql.dll”选项。
注意:在完成数据库的加载后,要保存php.ini文件,并且重新启动Apache服务器,修改才能够生效。
PDO构造函数
在PDO中,要建立与数据库的连接需要实例化PDO的构造函数。PDO构造函数的语法如下:
_construct(string $dsn[,string $username[,string $password[,string $password[,array $driver_options]]])
参数说明:
dsn: 数据源名,包括主机名端口号和数据库名称。
username: 连接数据库用户名。
password: 连接数据库的密码。
driver_options: 连接数据库的其他选项
通过PDO连接MySQL数据库的代码如下:
header("Content-Type:text/html;charset=utf-8");//设置页面的编码格式
$dbms='mysql';//数据库类型
$dbName='database';//使用数据库名称
$user='root';//使用的数据库用户名
$pwd='111';//使用的数据库密码
$host='localhost';//使用的主机名称
$dsn="$dbms:host=$host;dbname=$dbName";
try{//捕获异常
$pdo=new PDO($dsn,$user,$pwd);//实例化对象
echo "PDO连接MySQL成功";
}catch(Exception $e){
echo $e->getMessage()."
";
}
?>
DSN详解
DSN 是 Data Source Name (数据源名称)的首字母缩写。DSN提供连接数据库需要的信息。PDO的DSN包括3部分,即PDO驱动名称(如mysql、sqlite或者pgsql)、冒号和驱动特定的语法。每种数据库都有其特定的驱动语法。
在使用不同的数据库时,必须明确数据库服务器是完全独立于PHP的实体。虽然在讲解本书的内容时,数据库服务器和Web服务器是在同一台计算机上,但实际的情况可能不是如此。数据库服务器可能与Web服务器不是在同到台计算机上,此时要通过PDO连接数据库时,就需要修改DNS中的主机名称。
由于数据库服务器只在特定的端口上监听连接请求。每种数据库服务器具有一个默认的端口号(MySQL 是 3306),但是数据库管理员可以对端口号进行修改,因此有可能PHP找不到数据库的端口,此时就可以在DSN中包含端口号。
另外由于一个数据库服务器中可能拥有多个数据库,所以在通过DSN连接数据库时,通常都包括数据库名称,这样就可以确保连接的是想要的数据库,而不是其他人的数据库。