为了账号安全,请及时绑定邮箱和手机立即绑定
  • try{ $dsn='mysql:host=localhost;dbname=imooc'; $username='root'; $passwd='root'; //关闭自动提交功能(PDO::beginTransaction()中有这个功能但不是所有类型的数据库都支持,所有手动关闭是个好习惯) $options=array(PDO::ATTR_AUTOCOMMIT,0); $pdo=new PDO($dsn, $username, $passwd, $options); var_dump($pdo->inTransaction()); //判断这条语句是否在一个事务代码中,返回值为false $pdo->beginTransaction(); //开启事务 var_dump($pdo->inTransaction()); //判断这条语句是否在一个事务代码中,返回值为true $res1=$pdo->exec('UPDATE userAccount SET money=money-2000 WHERE username="imooc"'); if($res1==0){ throw new PDOException('imooc 转账失败'); //抛出异常给catch } $res2=$pdo->exec('UPDATE userAccount SET money=money+2000 WHERE username="king"'); if($res2==0){ throw new PDOException('king 接收失败'); //抛出异常给catch } $pdo->commit(); //提交事务 且开启自动提交 }catch(PDOException $e){ $pdo->rollBack(); //回滚事务 且开启自动提交 echo $e->getMessage(); }
    查看全部
    0 采集 收起 来源:PDO事务处理

    2018-03-22

  • /* PDO::ERRMODE_SILENT:默认模式,静默模式,完全不显示, PDO::ERRMODE_WARNING:警告模式,抛出警告后,程序可继续运行 PDO::ERRMODE_EXCEPTION:异常模式(UP推荐模式),错误信息显示最完整,在抛出异常后程序停止运行 */ $pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql='SELECT * FROM noneTable'; $pdo->query($sql); echo $pdo->errorCode(); //显示错误STATE码 echo '<br/>'; print_r($pdo->errorInfo()); //显示错误信息
    查看全部
  • 当返回的PDOStatement对象中存储了多个结果集,使用PDOStatement::fetchAll()方法每次只能取出一个结果集,此时需要使用PDOStatement ::nextRowset();移动结果集指针让其指向下一个结果集,才能用PDOStatement::fetchAll()或者PDOStatement::fetch()方法取到下一个结果集记录. $sql='call test1()'; //test1为SQL的PROCEDURE(存储过程) $stmt=$pdo->query($sql); //PDOStatement对象中存储了多个结果集 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); //只能取出一个结果集 print_r($rowset); echo '<hr color="red"/>'; $stmt->nextRowset(); //移动结果集指针 $rowset=$stmt->fetchAll(PDO::FETCH_ASSOC); print_r($rowset);
    查看全部
  • PDOStatement::debugDumpParams()打印一条 SQL 预处理命令详情 (没有返回值。) 直接打印出一条预处理语句包含的信息。提供正在使用的 SQL 查询、所用参数(Params)的数目、参数的清单、参数名、用一个整数表示的参数类型(paramtype)、键名或位置、值、以及在查询中的位置 SQL模板中的占位符不同,打印出来的结果也会不同
    查看全部
  • PDOStatement::fetchColumn()从结果集中的下一行返回单独的一列。 //因为每次调用此方法后,记录指针将自动指向结果集中的下一条记录(且没有办法返回),在此调用时取得将是下一条记录的对应列数据 echo $stmt->fetchColumn(0); //取第一行第一列数据 echo $stmt->fetchColumn(1); //取第二行第二列数据 echo $stmt->fetchColumn(2); //取第三行第三列数据
    查看全部
  • $sql='SELECT username,password,email FROM user'; $stmt=$pdo->prepare($sql); $stmt->execute(); //PDOStatement::columnCount()返回结果集中的列数 echo '结果集中的列数一共有:'.$stmt->columnCount(); //PDOStatement::getColumnMeta()返回结果集中一列的元数据(从0开始计数) print_r($stmt->getColumnMeta(0)); //PDOStatement::bindColumn()绑定一列到一个 PHP 变量(相当于给结果集的列起了别名) $stmt->bindColumn(1, $username); $stmt->bindColumn(2,$password); $stmt->bindColumn(3, $email); while($stmt->fetch(PDO::FETCH_BOUND)){ echo '用户名:'.$username.'-密码:'.$password.'-邮箱:'.$email.'<hr/>'; } //也可以这么绑定,第一个参数对应SQL查询语句的列名 $stmt->bindColumn(‘username’, $username); $stmt->bindColumn(‘password’,$password); $stmt->bindColumn(‘email’, $email);
    查看全部
  • PDOStatement:: bindValue()将变量或者值绑定到SQL模板中(可以为变量,也可以为值) //PDOStatement:: bindValue()参数说明(占位符为[:name]情况)(UP推荐使用方式,不容易乱) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一个参数为相应的占位符,第二个参数为绑定变量(或值),第三个变量指定变量类型,(第一,二个参数必填,其他为可选) $stmt->bindValue(':username',$username); $stmt->bindValue(':password',$password); $stmt->bindValue(':email','king@imooc.com'); $username='imooc1'; $password='imooc1'; $email='imooc1@imooc.com'; $stmt->execute(); //PDOStatement:: bindValue()参数说明(占位符为[?]情况) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一个参数为整型对应SQL模板中的第几个问号,其他参数和使用条件与[:name]情况相同 $stmt->bindValue(1,$username); $stmt->bindValue(2,$password); $stmt->bindValue(3,'imooc@imooc.com'); $username='imooc'; $password='imooc'; $email='imooc@imooc.com'; $stmt->execute();
    查看全部
  • PDOStatement:: bindParam()将变量绑定到SQL模板中(只能绑定变量而不能为确定的值) //PDOStatement:: bindParam()参数说明(占位符为[:name]情况)(UP推荐使用方式,不容易乱) $sql="INSERT user(username,password,email) VALUES(:username,:password,:email)"; $stmt=$pdo->prepare($sql); //第一个参数为相应的占位符,第二个参数为绑定变量(必须为变量而不能直接指定值,因为bindParam()设计时将第二个参数设定为变量的引用[&$参数二]),第三个变量指定变量类型,(第一,二个参数必填,其他为可选) $stmt->bindParam(":username",$username,PDO::PARAM_STR); $stmt->bindParam(":password",$password,PDO::PARAM_STR); $stmt->bindParam(":email",$email); $username='imooc1'; $password='imooc1'; $email='imooc1@imooc.com'; $stmt->execute(); //PDOStatement:: bindParam()参数说明(占位符为[?]情况) $sql="INSERT user(username,password,email) VALUES(?,?,?)”; $stmt=$pdo->prepare($sql); //第一个参数为整型对应SQL模板中的第几个问号,其他参数和使用条件与[:name]情况相同 $stmt->bindParam(1,$username,PDO::PARAM_STR); $stmt->bindParam(2,$password,PDO::PARAM_STR); $stmt->bindParam(3,$email); $username='imooc'; $password='imooc'; $email='imooc@imooc.com'; $stmt->execute();
    查看全部
  • $username=$_POST['username']; $password=$_POST['password']; 使用命名(:name)参数来准备SQL语句 $sql="select * from user where username=:username and password=:password"; $stmt=$pdo->prepare($sql); $stmt->execute(array(":username"=>$username,":password"=>$password)); 使用问号(?)参数来准备SQL语句 $sql="select * from user where username=? and password=?"; $stmt=$pdo->prepare($sql); $stmt->execute(array($username,$password));
    查看全部
  • $stmt=$pdo->query($sql); //PDOStatement对象的方法:rouCount():对于select操作返回的结果集中记录的条数, //对于INSERT、UPDATE、DELETE返回受影响的记录的条数 echo $stmt->rowCount(); //PDO对象的quote()方法:给指定字符串加引号,并将字符串中的引号做转移,过滤字符串中的特殊字符(UP不推荐这种方法过滤注入) $username=$pdo->quote($username); 在之后的SQL语句中将不用给变量在加引号,如下 使用$pdo->quote()后:$sql="select * from user where username='{$username}' and password='{$password}'"; 不使用$pdo->quote():$sql="select * from user where username={$username} and password='{$password}'";
    查看全部
  • PDO::getAttribute — 取回一个数据库属性 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1)//设置数据库连接属性中的自动提交功能为1(开启) //链接数据库时设置数据库属性(数据库属性存放在一个关联数组中) $options=array(PDO::ATTR_AUTOCOMMIT=>0,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION); $pdo=new PDO($dsn, $username, $passwd, $options); PDO::setAttribute — 设置一个数据库属性 $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT) php在读双引号中的内容时,一旦遇到$,就希望找到一个最可能的变量.所以在没有引起歧义的情况下 echo "PDO::ATTR_$attr: "; php找到变量$attr并解析它(没有$a,$at,$att.$attr: 变量情况下).所以以上写法为正确语句.
    查看全部
  • PDO预处理(下篇) //fetch():得到结果集中的一条记录 $row=$stmt->fetch(); //默认得到的结果为关联数组和索引数组 //可以通过设置fetch()方法参数获得返回结果的不同形式 $row=$stmt->fetch(PDO::FETCH_ASSOC); //关联数组 $row=$stmt->fetch(PDO::FETCH_BOTH); //(默认)两种同时获取 $row=$stmt->fetch(PDO::FETCH_NUM); //索引数组 $row=$stmt->fetch(PDO::FETCH_OBJ); //返回对象 //还有其他形式可以 //fetchAll():得到结果集中的所有记录 $row=$stmt-> fetchAll(); //默认得到的结果为关联数组和索引数组 //可以通过设置fetchAll()方法参数获得返回结果的不同形式(参数设置方法与fetch()类似) //PDOStatement::setFetchMode():设置fetch()或fetchAll()的默认返回值形式(此方法只存在于PDOStatement对象中) //可以通过设置setFetchMode()方法参数改变fetch()或fetchAll()的默认返回值形式(参数设置方法与fetch()类似) PDOStatement中内置有结果集指针,当用fetch()获取一条结果集中的记录后,指针将会移动指向下一条记录,不论是用fetch()或fetchAll()取记录,将从指针所指记录开始取
    查看全部
  • PDO预处理(上篇) PDO::query ($sql)方法返回的结果是PDOStatement实例对象,PDOStatement可以用来操作结果集了。 PDO::prepare()方法返回的也是PDOStatement,但这时PDOStatement代表一条预处理语句,也就是说如果你通过PDO::prepare()查询,实际上并未执行sql,而是得到一个预处理语句(PDOStatement),然后你调用PDOStatement::execute()方法真正执行。执行结果集保存在保存在调用execute()方法的PDOStatement中 //prepare($sql):准备SQL语句 $stmt=$pdo->prepare($sql); //execute():执行预处理语句 $res=$stmt->execute();
    查看全部
  • PDO::query($sql),执行SQL语句(不论是增删改查),返回PDOStatement对象
    查看全部
  • [PDO] errorCode()和errorInfo()方法查看错误信息 $pdo->errorCode():返回数据库句柄上一次操作相关的SQLSTATE的值 $pdo->errorInfo():返回的错误信息的数组,数组中包含3个单元(0=>SQLSTATE,1=>CODE,2=>INFO)
    查看全部

举报

0/150
提交
取消
课程须知
1、掌握PHP的基础语法知识 2、掌握MySQL基本增删改查语句 3、对面向对象的基本概念有清晰的认识,熟悉PHP中类定义的基本语法
老师告诉你能学到什么?
1、掌握PDO的基本概念及安装和配置 2、掌握PDO处理数据的基本操作 3、理解PDO事务处理 4、掌握类的封装的方法

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!