php 捕获sql异常,PDO中捕获SQL语句中的错误

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文件中进行配置,如图所示。

pdosql.html

要启用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连接数据库时,通常都包括数据库名称,这样就可以确保连接的是想要的数据库,而不是其他人的数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值