zoukankan      html  css  js  c++  java
  • PHP的学习--连接MySQL的三种方式

    记录一下PHP连接MySQL的三种方式。

    先mock一下数据,可以执行一下sql。

    /*创建数据库*/
    CREATE DATABASE IF NOT EXISTS `test`;
    
    /*选择数据库*/
    USE `test`;
    
    /*创建表*/
    CREATE TABLE IF NOT EXISTS `user` (
        name varchar(50),
        age int
    );
    
    /*插入测试数据*/
    INSERT INTO `user` (name, age) VALUES('harry', 20), ('tony', 23), ('harry', 24);

    第一种是使用PHP原生的方式去连接数据库。代码如下:

    <?php
    $host = 'localhost';
    $database = 'test';
    $username = 'root';
    $password = 'root';
    $selectName = 'harry';//要查找的用户名,一般是用户输入的信息
    $insertName = 'testname';
    
    $connection = mysql_connect($host, $username, $password);//连接到数据库
    mysql_query("set names 'utf8'");//编码转化
    if (!$connection) {
        die("could not connect to the database.
    " . mysql_error());//诊断连接错误
    }
    $selectedDb = mysql_select_db($database);//选择数据库
    if (!$selectedDb) {
        die("could not to the database
    " . mysql_error());
    }
    $selectName = mysql_real_escape_string($selectName);//防止SQL注入
    $query = "select * from user where name = '$selectName'";//构建查询语句
    $result = mysql_query($query);//执行查询
    if (!$result) {
        die("could not to the database
    " . mysql_error());
    }
    while ($row = mysql_fetch_row($result)) {
        //取出结果并显示
        $name = $row[0];
        $age = $row[1];
        echo "Name: $name Age: $age 
    ";
    }
    
    //添加记录
    $insertName = mysql_real_escape_string($insertName);//防止SQL注入
    $insertSql = "insert into user(name, age) values('$insertName', 18)";
    $result = mysql_query($insertSql);
    echo $result . "
    ";
    
    
    //更新记录
    $updateSql = "update user set age = 19 where name='$insertName'";
    $result = mysql_query($updateSql);
    echo $result . "
    ";
    
    //删除记录
    $deleteSql = "delete from user where age = 19";
    $result = mysql_query($deleteSql);
    echo $result . "
    ";
    
    mysql_close($connection);//关闭连接

    其运行结构如下:

    Name: harry Age: 20 
    Name: harry Age: 24 
    1
    1
    1

    第二种时使用mysqli扩展去链接数据库,代码如下:

    <?php
    $host = 'localhost';
    $database = 'test';
    $username = 'root';
    $password = 'root';
    $selectName = 'harry';//要查找的用户名,一般是用户输入的信息
    $insertName = 'testname';
    
    // 创建对象并打开连接,最后一个参数是选择的数据库名称
    $mysqli = new mysqli($host, $username, $password, $database);
    
    // 编码转化为 utf8
    if (!$mysqli->set_charset("utf8")) {
        printf("Error loading character set utf8: %s
    ", $mysqli->error);
    } else {
        printf("Current character set: %s
    ", $mysqli->character_set_name());
    }
    
    if (mysqli_connect_errno()) {
        // 诊断连接错误
        die("could not connect to the database.
    " . mysqli_connect_error());
    }
    
    $selectedDb = $mysqli->select_db($database);//选择数据库
    if (!$selectedDb) {
        die("could not to the database
    " . mysql_error());
    }
    
    if ($stmt = $mysqli->prepare("select * from user where name = ?")) {
        /* bind parameters for markers */
        $stmt->bind_param("s", $selectName);
        /* execute query */
        $stmt->execute();
        /* bind result variables */
        $stmt->bind_result($name, $age);
    
        /* fetch values */
        while ($stmt->fetch()) {
            echo "Name: $name Age: $age 
    ";
        }
        /* close statement */
        $stmt->close();
    }
    
    //添加记录
    if ($insertStmt = $mysqli->prepare("insert into user(name, age) values(?, 18)")) {
        /* bind parameters for markers */
        $insertStmt->bind_param("s", $insertName);
        /* execute query */
        $insertStmt->execute();
        echo $insertStmt->affected_rows . "
    ";
        /* close statement */
        $insertStmt->close();
    }
    
    //更新记录
    if ($updateStmt = $mysqli->prepare("update user set age = 19 where name=?")) {
        /* bind parameters for markers */
        $updateStmt->bind_param("s", $insertName);
        /* execute query */
        $updateStmt->execute();
        echo $updateStmt->affected_rows . "
    ";
        /* close statement */
        $updateStmt->close();
    }
    
    //删除记录
    $result = $mysqli->query("delete from user where age = 19");
    echo $result . "
    ";
    
    $mysqli->close();//关闭连接

    其结果与第一种相同。

    其实mysqli提供了两种方式链接数据库,一种是面向对象的方式,就是如上的代码,另一种是面向过程的方式。可以参考MySQLi扩展功能概述学习。

    第三种是使用PDO的方式去连接数据库,代码如下:

    <?php
    $host = 'localhost';
    $database = 'test';
    $username = 'root';
    $password = 'root';
    $selectName = 'harry';//要查找的用户名,一般是用户输入的信息
    $insertName = 'testname';
    
    $pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password);//创建一个pdo对象
    $pdo->exec("set names 'utf8'");
    $sql = "select * from user where name = ?";
    $stmt = $pdo->prepare($sql);
    $rs = $stmt->execute(array($selectName));
    
    if ($rs) {
        // PDO::FETCH_ASSOC 关联数组形式
        // PDO::FETCH_NUM 数字索引数组形式
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $name = $row['name'];
            $age = $row['age'];
            echo "Name: $name Age: $age 
    ";
        }
    }
    
    $oldAge = 18;
    $insert = $pdo->prepare('insert into user(name, age) values(:name, :age)');
    $insert->bindParam(':name', $insertName, PDO::PARAM_STR);
    $insert->bindParam(':age', $oldAge, PDO::PARAM_INT);
    $result = $insert->execute();
    echo $result . "
    ";
    
    $newAge = 19;
    $update = $pdo->prepare('update user set age = ? where name = ?');
    $update->bindParam(1, $newAge, PDO::PARAM_INT);
    $update->bindParam(2, $insertName, PDO::PARAM_STR);
    $result = $update->execute();
    echo $result . "
    ";
    
    $delete = $pdo->prepare('delete from user where age = ?');
    $result = $delete->execute(array($newAge));
    echo $result . "
    ";
    
    $pdo = null;//关闭连接

    其结果与第一种相同。

  • 相关阅读:
    C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
    Protocol Buffers 语法指南
    ERP、SCM及电子商务关系分析
    ]进程注入是王道之为NhibernateProfiler增加“附加到进程”功能原理(源码)
    架构师职位与软件文档的思考
    OSGI:从面向接口编程来理解OSGI
    开源的.NET桌面程序自动更新组件 ——Sharp Updater 2.1发布
    C#开源文件实时监控工具Tail&TailUI
    SQL 存储过程入门(变量)
    Python入门笔记(2):基础(上)
  • 原文地址:https://www.cnblogs.com/CraryPrimitiveMan/p/4385034.html
Copyright © 2011-2022 走看看