PHP的学习--连接MySQL的三种方式

62 篇文章 0 订阅
7 篇文章 0 订阅

先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.\n" . mysql_error());//诊断连接错误
}
$selectedDb = mysql_select_db($database);//选择数据库
if (!$selectedDb) {
    die("could not to the database\n" . 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\n" . mysql_error());
}
while ($row = mysql_fetch_row($result)) {
    //取出结果并显示
    $name = $row[0];
    $age = $row[1];
    echo "Name: $name Age: $age \n";
}

//添加记录
$insertName = mysql_real_escape_string($insertName);//防止SQL注入
$insertSql = "insert into user(name, age) values('$insertName', 18)";
$result = mysql_query($insertSql);
echo $result . "\n";


//更新记录
$updateSql = "update user set age = 19 where name='$insertName'";
$result = mysql_query($updateSql);
echo $result . "\n";

//删除记录
$deleteSql = "delete from user where age = 19";
$result = mysql_query($deleteSql);
echo $result . "\n";

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\n", $mysqli->error);
} else {
    printf("Current character set: %s\n", $mysqli->character_set_name());
}

if (mysqli_connect_errno()) {
    // 诊断连接错误
    die("could not connect to the database.\n" . mysqli_connect_error());
}

$selectedDb = $mysqli->select_db($database);//选择数据库
if (!$selectedDb) {
    die("could not to the database\n" . 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 \n";
    }
    /* 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 . "\n";
    /* 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 . "\n";
    /* close statement */
    $updateStmt->close();
}

//删除记录
$result = $mysqli->query("delete from user where age = 19");
echo $result . "\n";

$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 \n";
    }
}

$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 . "\n";

$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 . "\n";

$delete = $pdo->prepare('delete from user where age = ?');
$result = $delete->execute(array($newAge));
echo $result . "\n";

$pdo = null;//关闭连接

复制代码

其结果与第一种相同。

pdo::query()方法
当执行返回结果集的select查询时,或者所影响的行数无关紧要时,应当使用pdo对象中的query()方法.
如果该方法成功执行指定的查询,则返回一个PDOStatement对象.
如果使用了query()方法,并想了解获取数据行总数,可以使用PDOStatement对象中的rowCount()方法获取.

pdo::exec()方法
当执行insert,update,delete没有结果集的查询时,使用pdo对象中的exec()方法去执行.
该方法成功执行时,将返回受影响的行数.注意,该方法不能用于select查询.

PDO事务:

$pdo->beginTransaction();//开启事务处理

try{
    //PDO预处理以及执行语句...
    
    $pdo->commit();//提交事务
}catch(PDOException $e){
    $pdo->rollBack();//事务回滚
    
    //相关错误处理
    throw $e;
}

参考:http://www.cnblogs.com/CraryPrimitiveMan/p/4385034.html

           https://blog.csdn.net/zuiliannvshen/article/details/78247244

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值