笔友城堡 - 可定义的个人主页

前言

主要是介绍PHP脚本操作MySQL

根据《MySQL基础教程-西泽梦路》学习,简单的做一下笔记。

记录于此,方便自己回忆。

正文

PDO

什么是PDO

PDO是PHP 5.1.0及更高版本中定义的标准数据库连接机制,其目的是更方便地利用数据库。PDO是用于管理数据库的“类”(class),通过其“对象”(object)来操作数据库。

PDO的用法

new PDO(数据源名称,数据库用户名,数据库密码);

数据源名称格式

驱动名称:host=主机名;dbname=数据库名

驱动名称有如下几种

 数据库种类 驱动名称 MySQL mysql PostgreSQL pgsql Oracle oci SQL                 sqlsrv

我这里是MySQL数据,也就用mysql

<?php //数据库类型 :mysql //数据库名   :daohang //用户名     : root //密码       : rootroot $conn = new PDO("mysql:host=localhost;dbname=daohang", "root", "rootroot");?>

比较流行的写法,单独抽出来写,方便维护。(就是代码有点长)

<?php //数据库类型 $dbtype = 'mysql'; //服务器地址:127.0.0.1 或localhost $servername ='localhost'; //数据库名 $dbname = 'daohang'; //用户名 $username = 'root'; //登入密码 $password = 'rootroot'; //字符集[可选] $charset ='utf8'; //数据源 $dsn = "$dbtype:host=$servername;dbname=$dbname;charset=$charset"; try {   $conn = new PDO($dsn,$username,$password); } catch (PDOException $e) {   echo "Connection failed: " . $e->getMessage(); }?>

query()

# 1PDO对象->query("执行语句");# 2PDO对象->query('执行语句');

其实就是我们之前学的mysql语句放入上面即可。

创建数据库

判断是否存在数据,如果不存在就创建

//创建数据库daohang$status = $conn->query('create database if not exists daohang;');//创建成功或已经存在也是有返回值的!if($status){   print("good!<br>");}else {   print("bad!<br>");}

如果不加[if not exists]时,如果存在数据库daohang,会崩溃

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1007 Can't create database 'daohang'; database exists in 

创建表

//创建表tb8$status = $conn->query('create table if not exists tb8 (empid varchar(10), name varchar(30), age int)');//创建成功或已经存在也是有返回值的!if($status){ print("good!<br>");}else { print("bad!<br>");}

如果不加[if not exists]时,如果存在表tb8,会崩溃

Fatal error: Uncaught PDOException: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'tb8' already exists in

插入数据

//插入1条$conn->query('insert into tb8 (empid,name,age) values("A111", "笔友城堡",1)');//插入2条$conn->query('insert into tb8 (empid,name,age) values("A222", "笔友城堡2",2),("A333", "笔友城堡3",3)');//缺省列名写法$conn->query('insert into tb8 values("A444", "笔友城堡4",4)');

查询数据

//查询所有数据$re = $conn->query('select * from tb8');

虽然获取打蜡返回值re,但re是PDOStatement对象,不能直接打印,而是需要PDOStatement中方法进行获取。

要获取查询的数据,需要使用fetch()方法,也就是接下来介绍的。

fetch()

PDOStatement对象->fetch();

通过fetch()获取的是数据数组,也就是一行中的数据。每个数组中存放了列个数相关的内容。

如果没有行可读取就会返回FALSE。

因此,为了遍历所有数据。

//查询$re = $conn->query('select * from tb8');while( $result = $re->fetch()){ echo "<br>"; //tb8中的列名个数 //按照顺序分别为[empid,name,age] print($result[0]); print($result[1]); print($result[2]);}

try catch

异常捕获

try{ 存在异常的语句;}catch(异常名称 接收异常的变量){ 输出异常情况}

比如在创建PDO

try { //创建连接 $conn = new PDO($dsn,$username,$password);} catch (PDOException $e) { echo "Connection failed: " . $e->getMessage();}

setAttribute()

从上面可以知道,但PHP与My SQL连接失败时会发生异常。

但是,连接到My SQL时生成的PDO对象默认设置为连接后即使发生错误也不进行异常处理。

比如

# 此处去掉了if not exists$status = $conn->query('create database daohang;');

因为数据库已经存在,但这里有重新创建了,本应该出现

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1007 Can't create database 'daohang'; database exists in ...

但没有,只是$status为空。

为看到MySQL出现的异常情况,需要setAttribute()改变一些属性。

//设置PDO为异常模式$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

设置后,出现语法错误或重复创建等异常都会提示。

Post

介绍一下通过POST传数据已经获取数据

index.html

<p> <form method="POST" action="simple_insert.php"> <div> 输入姓名<input type="text" name="name"> </div> <div>输入消息<input type="text" name="message" size=150></div> <input type="submit" value="发送消息"> </form></p>

simple_insert.php

# 这里只是主要获取name和message内容<?php $name = $_POST["name"]; $message = $_POST["message"];?>

参考文章

  1. 《MySQL基础教程-西泽梦路》

  2. PHP PDO 连接操作数据库

相关文章

笔友城堡 - 可定义的个人主页

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...