《MySQL基础教程》笔记8

Web2023年12月3日 am8:08发布8个月前更新 3XCN.COM站长
0 0 0
广告也精彩
目录

前言

主要是介绍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()
# 1
PDO对象->query("执行语句");
# 2
PDO对象->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 连接操作数据库

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

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

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。