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.\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;//关闭连接
其结果与第一种相同。
PHP的学习--连接MySQL的三种方式的更多相关文章
- php 链接mysql的三种方式对比
PHP连接Mysql的三种方式: 1.原生的连接方式 原生的连接方式是面向过程的写法 <?php $host = 'localhost'; $database = 'test'; $usern ...
- JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取
创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...
- JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取
创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...
- 使用zabbix监控mysql的三种方式
使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- AngularJs学习——实现数据绑定的三种方式
三种方式: 方式一:<h5>{{msg}}</h5> 此方式在页面刷新的时候会闪现{{}} 方式二:<h5 ng-bind="msg">< ...
- Spring学习(二)三种方式的依赖注入
1.前言 上一篇讲到第一个Spring项目的创建.以及bean的注入.当然.注入的方式一共有三种.本文将展开细说. 1.set注入:本质是通过set方法赋值 1.创建老师类和课程类 1.Course ...
- Java连接MySQL数据库三种方法
好久没有更新博客了!今天利用周目时学习了一下数据库mysql.介绍一下数据库的三种连接方式! 开发工具:Myeclipse MySQL5.6 MySQL连接驱动:mysql-connector-jav ...
- C# | VS2019连接MySQL的三种方法以及使用MySQL数据库教程
本文将介绍3种添加MySQL引用的方法,以及连接MySQL和使用MySQL的教程 前篇:Visual Studio 2019连接MySQL数据库详细教程 \[QAQ \] 第一种方法 下载 Mysql ...
随机推荐
- Emacs-24.1 + ECB-2.40 + cscope-15.7a + cedet 无root权限指定目录安装与配置
emacs等安装在-/INSTALL目录下,在-下新建一个INSTALL目录. 1. emacs-24.1.tar.gz ecb-2.40.tar.gz cscope-15.7a.tar.bz2下载到 ...
- XP退役了,如何把Win7变成XP风格?| 怎么样去掉Win7的所有华丽效果? | 怎么样让Win7达到电脑最佳性能?
XP系统退役了,以后微软停止XP系统的更新维护了. 不得不升级使用Windows7系统,但是大部分使用Windows7不习惯. 那是因为你的操作习惯,还保持在XP风格基础上. 那么有没有什么办法让Wi ...
- Entity FrameWork 单表对多实体
一个影片信息Clips表,四个字段:clipId,clipName,fileSize,fileName 方案一: [Table("Clips")] public class Cli ...
- 修改TFS2013服务账户或者密码
修改TFS2013服务账户或者密码 TFS作为微软软件开发的全生命周期管理解决方案,可以很好的与windows的域管理结合使用,方便多系统下用户的管理和授权.如果TFS使用的服务账户设置的域账户密码过 ...
- Java设计模式12:装饰器模式
装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...
- 在MVVM模式中,按钮Click事件的绑定方法
在MVVM模式中,我们将Button的方法写到ViewModel中,然后绑定到前端界面.通常的做法是写一个类,继承ICommand接口,然而如果按钮比较多的话,就需要写很多的类,对于后期维护造成很大的 ...
- WCF Data Service
WCF Data Service:http://www.cnblogs.com/shanyou/category/240225.html
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- XMPie Tracking 操作
XMPie Tracking 操作 1.1 打开页面 我们随便打开一个页面,这里打开landing.aspx 我们想要跟踪页面,选中DW上面的TrackingàTracking Page Vis ...
- CSS水平垂直居中的几种方法2
直接进入主题! 一.脱离文档流元素的居中 方法一:margin:auto法 CSS代码: div{ width: 400px; height: 400px; position: relative; b ...