一、增、删、查
<?php
//PDO连接MSSQL例子,注意一个驱动和一个扩展,这里使的是mssql13.0的一个驱动,使用18.0时报错
// $dsn='sqlsvr:MSSQL';
// 服务器名称
$serverName = "127.0.0.1";
// 数据库名称(可选),不传取的是默认的master库
$database = "test01";
//sql server数据库用户
$uid = "";
//sql server数据库用户密码
$pwd = "";
//拼接连接字符串,pdo_sqlsvr的dsn以sqlsrv:为前缀
$dsn="sqlsrv:server=$serverName ; Database = $database";
// 创建PDO对象
$PDO = new PDO($dsn,$uid,$pwd);
// $conn = new PDO('sqlsrv:Server=(local)', '', '');
// $conn->query($statement);
// 拼装查询sql,不用处理中文编码问题
$query="select * from t1 where name='中国'";
//query()函数执行语句,返回一个PDOStatement 对象。
$stmt = $PDO->query( $query );
// PDOStatement 对象调用 fetch() 函数在结果集中获取行。返回组果是数据
while ( $row = $stmt->fetch() ){if(is_array($row)){
// 调用print_r方法输出结果print_r( $row );}
}
//拼装插入语句,同样不用处理中文编码问题。
$id=mt_rand();
$insert="insert into t1(id,name,qty,orderid)values($id,'中国人',50,1002)";
//$PDO对象执行exec()返回受影响的行数。
$count=$PDO->exec($insert);
if($count>0){echo "新增完成";
}else{echo "新增失败";
}//$PDO->prepare($insert)方法预处理语句,?占位符插入数据,并 捕获 INSERT 语句的结果 用 OUTPUT 子句 输出最后插入的ID值
// =sql-server-ver15
$insert="insert into t1(id,name,qty,orderid) OUTPUT INSERTED.id values(?,?,?,?)";
//创建$stmt pdostatement对象,prepare()预处理函数返回
$stmt=$PDO->prepare($insert);
$id=mt_rand();
//$stmt pdostatement对象,执行Execute(arr())填入数组变量以填充占位符的值,方法返回的是bool。
$stmt->execute(array($id,'预处理语句',100,1001));
// 用if有没有执行成功。
if ($stmt){
// 遍历结果集把output子句的结果返回while ($lastid=$stmt->fetch()) {// 把数组转生json字符串,然后输出,json_encode()有一个需要注意的地方,All string data must be UTF-8 encoded$rs=json_encode($lastid);echo $rs;}
}
二、SQL语句错误捕获
<?php
// 捕获sql语句的错误。使用PDO对象ATTR_ERRMODE不同模式。
$serverName="127.0.0.1";$db="test01";$User="";$PassWord="";$dsn="sqlsrv:Server=$serverName;Database=$db";$PDO = new PDO($dsn,$User,$PassWord);
/**PDO对象调用setAttribute(PDO::ATTR_ERRMODE[属性_错误模式],PDO::ERRMODE_SILENT[值])方法,*设置错误模式为【静默模式】,手动检查代码处理异常**设置错误模式为【警告模式】,手动检查代码处理异常**设置错误模式为【异常模式】,手动检查代码处理异常,默认是异常模式*/
// $PDO->setAttribute(pdo::ATTR_ERRMODE, pdo::ERRMODE_SILENT);// $PDO->setAttribute(pdo::ATTR_ERRMODE, pdo::ERRMODE_WARNING);$PDO->setAttribute(pdo::ATTR_ERRMODE, pdo::ERRMODE_EXCEPTION);
/** 拼接sql*/$sql="select * from test2";/** PDO对象调用prepare()方法,生成预处理对象;*/
$stmt=$PDO->prepare($sql);
/** 预处理对象,调用execute()方法,执行语句;*/
try{$stmt->execute();}
catch (PDOException $e){echo $e->getMessage();}
/** 预处理对象,调用errorcode()方法,获取错误码代码;*/
$errCode=$stmt->errorCode();
/** 如果错误代码不为空,调用errorinfo()获取错误信息;*/
// if($errCode<>""){
// echo $stmt->errorInfo()[2];
// }
echo $errCode;/* * 三个模式的个人总结:* pdo::ERRMODE_SILENT 静默模式 在调用execute()方法时不主动给错误信息,不会中断代码执行,后面的代码继续执行。* * pdo::ERRMODE_WARNING 警告模式 在调用execute()方法返回错误信息,代码继续行下执行。* * pdo::ERRMODE_EXCEPTION 异常模式 在调用execute()方法时抛出异常对象 PDOException,并中断代码执行,使用try{}catch(){}代码块捕获并处理异常*/
三、PDO事务处理
<?php
/* * PDO事务处理*/
/* * 创建PDO对象部分代码*/$serverName='127.0.0.1';$dbName='Test0';$dbUser='';$dbPws='';$dsn="sqlsrv:Server=$serverName;Database=$dbName";/** 使用try{}catch(){}代码块包裹PDO对象执行,如果发生异常捕获PDOException对象,返回异常信息,并调用rollback()方法回滚事务。*/try {$pdo = new PDO($dsn,$dbUser,$dbPws);/** 拼装SQL语句,生成预处理对象;*/$id=mt_rand();$insert="insert into t1(id,name,qty,orderid)values($id,'中国人',50,1002)";$stmt1=$pdo->prepare($insert);$id=mt_rand();$insert="insert into t3(id,name,qty,orderid)values($id,'中国人',50,1002)";$stmt2=$pdo->prepare($insert);/** 调用方法开启事务 beginTransaction(),*/$pdo->beginTransaction();/** 预处理对象调用execute()方法执行语句;*/$stmt1->execute();$stmt2->execute();/** PDO对象调用commit()提交事务*/$pdo->commit();} catch (PDOException $e) { /** 如出现异常,捕获异常对象,输异常信息,PDO对象调用rollBack()方法回滚事务*/echo $e->getMessage();$pdo->rollBack();}
本文发布于:2024-02-05 07:58:40,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170727845364745.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |