PHP PDO_SQLSVR学习示例

一、增、删、查

<?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值
// https://docs.microsoft.com/zh-cn/sql/t-sql/statements/insert-transact-sql?view=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();
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值