PHP 连接数据库

1、遇到的几个问题

  • php是服务端语言,php代码需要经过apache的渲染才能显示在页面上。如果在浏览器上直接访问本地php文件只会暴露PHP文件的源代码

  • 在使用超级全局数组即$_POST, $GET 时,如果页面尚未传输数据是会报错的(Undefined index)

<div class="col-md-8">
    <form action="index.php" method="post">
        <div class="form-group short">
            <input type="text" id="short" class="form-control" placeholder="姓名" name="name">
            <input type="text" id="short" class="form-control" placeholder="邮箱" name="email">
        </div>
        <div class="form-group">
            <input type="text" placeholder="标题" id="title" name="title">
        </div>
        <div class="form-group">
            <textarea  cols="30" rows="10" placeholder="内容" class="form-control" name="message"></textarea>
        </div>

        <div class="form-group">
            <button class="btn btn-primary btn-block" style="width: 90%;">提交</button>
        </div>
    </form>
</div>
  • form 表单action指向的地址为空时,默认会指向本身

一、使用PHP链接数据库

PHP文件中可以嵌入HTML代码,所以需要将PHP代码和HTML分隔开

PHP代码边界标记 <?php ... ?>,标记并不一定需要成对出现,如果只有<?php作为开头即表明接下来的代码都是PHP代码。

1、数据交互
  • 怎么实现前端页面和PHP代码的数据交互

    • form表单需要两个属性:action 指向处理数据的PHP文件,method 选择数据传输方式

      • input 需要被form包含
      • input需要提供name属性供后端处理进行识别
    • 服务端代码的表现和操作

      • 使用超级全局数组 $_POST $_GET 通过表单的name属性值从数组中取出传输的数据值
      • $_POST['name'] 其中的name即input中的name属性值,由此可见 $_POST $_GET$ 都是关联数组
    • 未提交数据直接访问脚本文件会出错(undefined index)

  • 页面出现中文乱码怎么处理

    • html中加上<meta charset="UTF-8">
    • php在代码头部加上header("Content-Type: text/html;charset=utf-8");
    • php文件设置utf8编码
    • 连接数据库执行语句 SET NAMES UTF8;(数据库出现中文乱码)

2、使用php连接数据库(MySQL数据库)

php提供了mysqli对象替代老旧的以面向过程方式连接数据库的方法

通过mysqli对象可以实现php连接数据库和执行sql语句等基本操作,所以可以认为mysqli是php提供的用来操作MySQL数据库的一个API

$db=new mysqli(数据库服务器地址,连接用户,连接密码,数据库名);
$db->query('需要执行的SQL语句');
$db->connect_error   //错误信息
$db->connect_errno  //如果为0,则数据库连接没有问题
  • 执行sql语句

    $db->query(sql)

    如果sql 是 show , desc , select等语句, 查询成功时返回 mysql_result 对象,失败返回false

    其他语句返回布尔值

  • 数据库基本操作

    查看已有的数据库
    show databases;
    
    use 数据库名;
    
    查看数据库中的表
    show tables;
    
    创建数据库
    create table test(
        title text not null,
        content text not null,
        email char(20) not null,
        name char(8) not null
    )
    
    插入表数据
    insert into test values('$title','$msg','$email','$name');
    
    查询数据
    select * from test;
    select title,content,email,name from test;
    
   注意单引号和双引号的问题
  ```html
 
  // 编写sql语句
  $sql1 = 'SET NAMES UTF8';  // 设置数据传输格式
  $insert = "insert into test values('{$title}','{$msg}','{$email}','{$name}');";
  $select = "select * from test;";
  
  // 执行sql语句
  $insert_result = $db->query($insert);
  var_dump($insert_result);
  • 获取查询结果
$mysqli_result = $db->query($select);

$row = $mysqli_result->fetch_array();

查询相关语句返回结果为 mysqli_result 结果集对象

从对象中获取数据


$mysqli_result->fetch_array()

  1. 每次读取一条记录保存为数组形式作为返回值(默认读取最新的数据),之后依次向下读取
  2. 可选参数:MYSQLI_ASSOC(返回关联数组) MYSQLI_NUM(返回索引数组)
  3. 没有数据时返回null , 可以作为一个判断条件

$row = $mysqli_result->fetch_assoc(); `

  1. 返回关联数组
  2. fetch_array(MYSQLI_ASSOC) 相同

var_dump($mysqli_result->fetch_row();

  1. 返回索引数组
  2. fetch_array(MYSQLI_NUM() 相同

使用循环获取查询结果

while($row = $mysqli_result->fetch_assoc()){
    var_dump($row);
    echo $row['title'];
    echo $row['content'];
    echo $row['email'];
}

二、PHP连接数据库步骤总结

  1. 建立sql连接(建立Mysqli对象)
  2. 检查连接的有效性
  3. 设置数据传输格式
  4. 编写执行sql语句
  5. 检查返回结果的有效性
  6. 输出结果集
$name = $_POST['name'];
$title = $_POST['title'];
$msg = $_POST['message'];
$email = $_POST['email'];

$host = '127.0.0.1';
$user = 'root';
$pwd = 'root';
$db_name = 'test';

// 建立sql连接
$db = new mysqli($host,$user,$pwd,$db_name);
// var_dump($db);

// 检查连接的有效性
if($db->connect_error <> 0){
    echo $db->connect_error;
    die('数据库连接失败');
}

$sql1 = 'SET NAMES UTF8';  
$insert = "insert into test values('{$title}','{$msg}','{$email}','{$name}');";
$select = "select * from test;";

// 设置数据传输格式
$db->query($sql1);

// 执行sql语句
$insert_result = $db->query($insert);
var_dump($insert_result);
$mysqli_result = $db->query($select);

if($mysqli_result === false){
    die('数据库操作错误');
}

// 输出结果
while($row = $mysqli_result->fetch_assoc()){
    echo $row['title'];
    echo $row['content'];
    echo $row['email'];
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值