首页 > 技术文章 > PHP与MySQL的交互(mysqli)

clew 2016-08-19 15:30 原文

近期在学习PHP,这里总结一下PHP与MySQL的交互。
这里我们使用mysqli进行连接。
mysqli扩展允许我们访问MySQL 4.1及以上版本提供的功能。
想深入了解mysqli的信息可以访问下面的网站进行学习:
http://php.net/manual/zh/book.mysqli.php

这里我们根据几个例子来简单了解交互方式。

环境:

    wampServer+sublime

创建数据库

例子:建立名为mydb的数据库

<?php
    /*
    建立连接
    其中第一个参数是服务器地址。
    其中第二个参数是用户名。
    其中第三个参数是密码。
    这些参数需要自己查。
     */
    $con =new mysqli("localhost","root","123456");
    //判断连接是否成功
    if (!$con){
        //连接失败输出错误。
        die('无法连接: ' . mysql_error());
    }
    //生成SQL语句,创建数据库mydb
    $sql = " CREATE DATABASE mydb ";
    //调用mysqli的query方法
    if ($con->query($sql) === TRUE){
        echo "创建成功";
    }else{
        echo "数据库创建失败: " . mysql_error();
    }
    //关闭连接
    $con->close();
?>

创建数据表

例子:创建一个名User的数据表

SQL语句为:

CREATE TABLE User
(id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
sex VARCHAR(20) NOT NULL,
dob DATE NOT NULL,
email VARCHAR(50) NOT NULL);

代码:

<?php
    // 创建连接,这里多的参数是数据库名称。
    $con = new mysqli("localhost","root","123456", "mydb");
    // 检测连接
    if ($con->connect_error) {
        die("连接失败: " . $con->connect_error);
    }

    // 使用 sql 创建数据表
    $sql = "CREATE TABLE User (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    password VARCHAR(20) NOT NULL,
    sex VARCHAR(20) NOT NULL,
    dob DATE NOT NULL,
    email VARCHAR(50) NOT NULL
    );";

    //调用mysqli的query方法
    if ($con->query($sql)) {
    echo "Table User created successfully";
    } else {
    echo "创建数据表错误: " . $con->error;
    }
    //关闭连接
    $con->close();
?> 

数据的插入

我们向数据表里插入如下数据:

‘测试’, ‘12345678’,’man’,’2016-3-3’,’test@example.com’

SQL语句如下:

INSERT INTO User 
(name,password,sex,dob,email)
VALUES 
('测试', '12345678','man','2016-3-3','test@example.com');

代码:

<?php
    // 创建连接
    $con = new mysqli("localhost","root","123456", "mydb");
    // 检测连接
    if ($con->connect_error) {
        die("连接失败: " . $con->connect_error);
    }
    // 使用 sql 插入数据
    $sql = "INSERT INTO User (name,password,sex,dob,email)
    VALUES ('测试', '12345678','man','2016-3-3','test@example.com')";
    if ($con->query($sql)) {
        echo "数据插入成功";
    } else {
        echo "插入错误: " . $con->error;
    }
    //关闭连接
    $con->close();
?>  

数据的预处理

插入数据时为了提高效率和防止注入使用预处理方式。
使用如下语句:

INSERT INTO User 
(name,password,sex,dob,email)
VALUES 
(?, ?,?,?,?);

在需要输入的信息位置用?代替。

这里要用到如下语句:
1)prepare()–>mysqli_stmt mysqli_prepare ( mysqli link,stringquery )预处理。
2)bind_param()–>将变量绑定到准备好的语句中。
3)execute() –>mysqli_stmt_execute() 执行预处理语句。

例子如下:

<?php
    // 创建连接
    $con = new mysqli("localhost","root","123456", "mydb");
    // 检测连接
    if ($con->connect_error) {
        die("连接失败: " . $con->connect_error);
    }
    //sql语句
    $sql ="INSERT INTO User (name,password,sex,dob,email)
    VALUES (?, ?,?,?,?)";
    // 预处理及绑定
    $stmt = $con->prepare($sql);

    /*
    bind_param()
    设置每个'?'要装入的值
    第一个参数是设置后几个参数的格式。
    s->string, i->integer, d->double
    第二个参数开始是上边需要装入的值。
    */
    $stmt->bind_param("sssss", $name, $password, $sex,$dob ,$email);
    // 设置参数并执行
    $name = "John";
    $password = "111111111111";
    $sex = "man";
    $dob = "2015-2-2";
    $email = "john@example.com";
    // 执行预处理语句
    $stmt->execute();
    echo "新记录插入成功";
    //关闭预处理
    $stmt->close();
    //关闭连接
    $con->close();
?>  

数据查询

查询数据库中的名字。

<?php
    // 创建连接
    $con = new mysqli("localhost","root","123456", "mydb");
    // 检测连接
    if ($con->connect_error) {
        die("连接失败: " . $con->connect_error);
    }
    //查询语句
    $sql = "SELECT name FROM User";
    $result = $con ->query($sql);
    //输出数据
    if($result->num_rows>0){
        while($row =$result->fetch_assoc()){
            echo $row["name"]."<br>";
        }
    }
    $con->close();
?>      

推荐阅读