PHP支持的数据库类型较多,但在早期的PHP版本中,各种不同的数据库扩展互不兼容,每个扩展都有各自的操作函数,导致PHP的维护非常困难,可移植性也非常差。为了解决这一问题,PHP开发了PDO数据库抽象层,当选择不同数据库时,只需修改PDO中的DSN(数据源)即可。
$db_type = 'mysql'; //数据库服务器类型 $db_host = '127.0.0.1'; $db_port = '3306'; $db_name = 'news2018'; $db_user = 'root'; $db_pwd = 'root'; $db_charset = 'utf8'; //使用PDO扩展连接数据库,需要实例化PDO类,同时传递数据库连接参数, //pdo连接数据库 $dsn = "{$db_type}:host={$db_host};port={$db_port};dbname={$db_name}"; //设置字符集 $db_options = [ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $db_charset ]; try { //连接数据库,选择数据库,设置字符集 $pdo = new PDO($dsn, $db_user, $db_pwd, $db_options); } catch (PDOException $e) { //输出异常信息 echo $e->getMessage() . "<br>"; exit; } //执行sql查询 SELECT //query() //query()方法主要用于有记录结果返回的操作,特别是SELECT操作。执行query()方法成功,则返回一个PDOStatement类的对象,失败则返回false。 $sql = 'select * from xuexi_news'; $res = $pdo->query($sql); //处理结果集 //$row = $res->fetch(); //默认 FETCH_BOTH //$row = $res->fetch(PDO::FETCH_ASSOC); //$row = $res->fetch(PDO::FETCH_NUM); //返回多行多列数据,二维数组 $result = []; while ($row = $res->fetch(PDO::FETCH_ASSOC)) { $result[] = $row; } //返回一个数据 $res = $pdo->query($sql); //$column = $res->fetchColumn(); $column = $res->fetchColumn(1); //返回一列数据 $result2 = []; while (($row = $res->fetchColumn(1)) !== false) { $result2[] = $row; } $res = $pdo->query($sql); //$result = $res->fetchAll(); // PDO::FETCH_BOTH //$result = $res->fetchAll(PDO::FETCH_ASSOC); $result = $res->fetchAll(PDO::FETCH_NUM); echo "<pre>"; print_r($result); //执行sql INSERT、UPDATE、DELETE等操作 //exec() //exec()则主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它用于执行一条SQL语句并返回执行后受影响的行数。 $sql = 'delete from xuexi_news where id=200'; $res = $pdo->exec($sql); var_dump($res); //预处理 //在SQL语句中可以添加占位符,PDO支持两种占位符,即问号占位符(?)和命名参数占位符(:参数名称)。 //问号占位符 //第一个参数是以1开始的索引 $sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)'; //执行预处理 $stmt = $pdo->prepare($sql); $title = '新闻标题'; $content = '新闻内容'; $author = '新闻作者'; $stmt->bindParam(1, $title); $stmt->bindParam(2, $content); $stmt->bindParam(3, $author); $res= $stmt->execute(); var_dump($res); //命名参数占位符(:参数名称) $sql = 'insert into xuexi_news (`title`,`content`,`author`) values (:title,:content,:author)'; //执行预处理 $stmt = $pdo->prepare($sql); $title = '新闻标题2'; $content = '新闻内容2'; $author = '新闻作者2'; $stmt->bindParam(':title', $title); $stmt->bindParam(':content', $content); $stmt->bindParam(':author', $author); $res= $stmt->execute(); var_dump($res); $sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)'; //$stmt = $pdo->prepare($sql); //$stmt->execute(['标题3','内容3','作者3']); $sql = 'insert into xuexi_news (`title`,`content`,`author`) values (:title,:content,:author)'; //$stmt = $pdo->prepare($sql); //$stmt->execute(['title'=>'标题4','content'=>'内容4','author'=>'作者4']); $data = [ ['标题1', '内容1', '作者1'], ['标题2', '内容2', '作者2'], ['标题3', '内容3', '作者3'], ['标题4', '内容4', '作者4'], ['标题5', '内容5', '作者5'], ]; $sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)'; //执行预处理 $stmt = $pdo->prepare($sql); $title = '新闻标题'; $content = '新闻内容'; $author = '新闻作者'; $stmt->bindParam(1, $title); $stmt->bindParam(2, $content); $stmt->bindParam(3, $author); foreach ($data as $val) { $title = $val[0]; $content = $val[1]; $author = $val[2]; //执行预处理语句 $stmt->execute(); }