为了账号安全,请及时绑定邮箱和手机立即绑定
  • //获得存放结果集中一条记录的关联数组 public static function getRow($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC")); return $result; } //执行增删改操作,返回受影响的记录的条数 public static function execute($sql=null){ //获取连接标识符 $link=self::$link; if(!$link) return false; //保存本次查询语句 self::$queryStr=$sql; //判断之前是否有结果集,如果有的话,释放结果集 if(!empty(self::$PDOStatement))self::free(); //POD::exec()方法返回受影响的记录的条数 或 false $result=$link->exec(self::$queryStr); //查看本次查询是否有错误,如果有则打印本次错误信息 self::haveErrorThrowException(); if($result){ //保存上一步插入操作产生AUTO_INCREMENT self::$lastInsertId=$link->lastInsertId(); //保存上一步操作产生受影响的记录的条数 self::$numRows=$result; return self::$numRows; }else{ return false; } }
    查看全部
  • //自定义异常处理程序 public static function throw_exception($errMsg){ echo '<div > '.$errMsg.' </div>'; } //释放结果集 public static function free(){ self::$PDOStatement=null; }
    查看全部
  • //查询语句(只能执行一条SQL语句) public static function query($sql=''){ //获取连接标识符 $link=self::$link; if(!$link) return false; //判断之前是否有结果集,如果有的话,释放结果集 if(!empty(self::$PDOStatement))self::free(); //保存本次查询语句 self::$queryStr=$sql; //预处理语句只能执行一条SQL语句 self::$PDOStatement=$link->prepare(self::$queryStr); $res=self::$PDOStatement->execute(); //查看本次查询是否有错误,如果有则打印本次错误信息 self::haveErrorThrowException(); return $res; } //查看最近一次 查询 或 连接 是否有错误,如果有则打印本次错误信息并返回false public static function haveErrorThrowException(){ $obj=empty(self::$PDOStatement)?self::$link: self::$PDOStatement; $arrError=$obj->errorInfo(); //错误信息数组下标为[0]的值为'00000'表示没有错误 if($arrError[0]!='00000'){ //获取错误信息并抛出异常 self::$error='SQLSTATE: '.$arrError[0].' <br/>SQL Error: '.$arrError[2].'<br/>Error SQL:'.self::$queryStr; self::throw_exception(self::$error); return false; } if(self::$queryStr==''){ self::throw_exception('没有执行SQL语句'); return false; } }
    查看全部
  • //获取存放结果集中所有记录的关联数组 public static function getAll($sql=null){ if($sql!=null){ self::query($sql); } $result=self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC")); return $result; }
    查看全部
  • //判断静态变量self::$link是否还没有没有被赋值(即之前没有数据库被连接) //即在之前没有连接其他数据库情况下,才能开始本次数据库的连接 if(!isset(self::$link)){ //保存本次连接参数 $configs=self::$config; if(self::$pconnect){ //开启长连接,添加到配置数组中 $configs['params'][constant("PDO::ATTR_PERSISTENT")]=true; } try{ self::$link=new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']); }catch(PDOException $e){ self::throw_exception($e->getMessage()); } //连接失败 if(!self::$link){ self::throw_exception('PDO连接错误'); return false; } //设置字符集 self::$link->exec('SET NAMES '.DB_CHARSET); //获取服务器版本 self::$dbVersion=self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION")); //设置连接成功标志符 self::$connected=true; //释放临时存放连接参数变量 unset($configs); } }
    查看全部
  • public function __construct($dbConfig=''){ //PHP将所有以 __(两个下划线)开头的类方法保留为魔术方法 if(!class_exists("PDO")){ //判断是否加载了PDO扩展 self::throw_exception('不支持PDO,请先开启'); } if(!is_array($dbConfig)){ //判断是否传参给构造函数,如果没有传参则取默认值 $dbConfig=array( 'hostname'=>DB_HOST, 'username'=>DB_USER, 'password'=>DB_PWD, 'database'=>DB_NAME, 'hostport'=>DB_PORT, 'dbms'=>DB_TYPE, 'dsn'=>DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME ); } //如果用户传参,但没有填写必填 //用户没有填写主机名,则抛出自定义异常程序 if(empty($dbConfig['hostname']))self::throw_exception('没有定义数据库配置,请先定义'); //获取用户连接参数,保存到自定义变量中 self::$config=$dbConfig; //用户没有填写驱动的连接选项,则赋空数组为默认值 if(empty(self::$config['params']))self::$config['params']=array();
    查看全部
  • /* 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));
    查看全部
  • 通过quote()返回带引号的字符串,过滤字符串中的特殊字符,防止sql注入。 不推荐使用quote()防止sql注入,推荐使用prepare()和execute()预处理防止sql注入。
    查看全部

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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