mysqli实现增删改查(转)
__construct ([ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket ]]]]]] )
要建立与MySQL的连接可以通过其构造方法实例化mysqli类,例如下面的代码:
<?php
$db_host = "localhost"; //连接的服务器地址
$db_user = "root"; //连接数据库的用户名
$db_psw = "root"; //连接数据库的密码
$db_name = "ikeepstudying"; //连接的数据库名称 // 创建连接
$conn = new mysqli($db_host,$db_user,$db_psw,$db_name); // 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
// 或者使用
// die('Error : ('. $conn->connect_errno .') '. $conn->connect_error);
}
echo "连接成功";
?>
mysqli还提供了一个连接MySQL的成员方法connect()。当实例化构造方法为空的mysqli类时,用mysqli对象调用connect()方法同样可连接MySQL,例如,下面的代码:
<?php
$db_host = "localhost"; //连接的服务器地址
$db_user = "root"; //连接数据库的用户名
$db_psw = "root"; //连接数据库的密码
$db_name = "ikeepstudying"; //连接的数据库名称
$conn = new mysqli();
$conn->connect($db_host,$db_user,$db_psw,$db_name); // 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
// 或者使用
// die('Error : ('. $conn->connect_errno .') '. $conn->connect_error);
}
echo "连接成功";
?>
关闭与MySQL服务器的连接通过mysqli对象调用close()方法即可,例如:
$conn->close();
mysqli_connect ([ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket ]]]]]] )
mysqli_connect()函数的用法与mysql扩展中的mysql_connect()函数用法十分相似,下面是mysqli_connect()函数的用法示例:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$database = "ikeepstudying"; // 创建连接
$conn = mysqli_connect($servername, $username, $password, $database); // 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
?>
关闭与MySQL服务器的连接使用mysqli_close()函数,例如:
mysqli_close();
2. PHP MySQL 插入数据
在创建完数据库和表后,我们可以向表中添加数据。
以下为一些语法规则:
- PHP 中 SQL 查询语句必须使用引号
- 在 SQL 查询语句中的字符串值必须加引号
- 数值的值不需要引号
- NULL 值不需要引号
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
以下实例向 "MyGuests" 表添加了新的记录:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "ikeepstudying"; // 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
} $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
} $conn->close();
?>
插入多条记录:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "ikeepstudying"; // 创建链接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查链接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
} $sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')"; if ($conn->multi_query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
} $conn->close();
?>
请注意,每个SQL语句必须用分号隔开。
2.面向过程
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "ikeepstudying"; // 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
} $sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')"; if (mysqli_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
} mysqli_close($conn);
?>
插入多条记录:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "ikeepstudying"; // 创建链接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查链接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
} $sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')"; if (mysqli_multi_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
} mysqli_close($conn);
?>
php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。
都是用在insert语句之后获取最新的自动id号,要注意的是mysqli_insert_id(),括号里面的一定要是数据库连接而不是执行结果$result。
程序实例:
$conn = new mysqli("127.0.0.1","root","","ikeepstudying") or die("数据库连接超时!");
$sql = "insert into my_table (name,url) values('ikeepstudying','http://justcode.ikeepstudying.com')";
$result = $conn->query($sql) or die("失败"); echo mysqli_insert_id($conn); //输出刚刚插入数据的ID,注意:括号里面的要是$conn而不是$result
3. PHP MySQL 预处理语句
预处理语句对于防止 MySQL 注入是非常有用的。使用预准备语句可提高重复使用语句的性能,在PHP中,使用prepare()方法来进行预准备语句查询,使用execute()方法来执行预准备语句。PHP有两种预准备语句:一种是绑定结果,另一种是绑定参数。
预处理语句, 绑定参数及绑定结果
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
- 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:
- INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
- 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
- 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
- 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
MySQLi 预处理语句及绑定参数
bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
以下实例在 MySQLi 中使用了预处理语句,并绑定了相应的参数:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "ikeepstudying"; // 创建连接
$conn = new mysqli($servername, $username, $password, $dbname); // 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
} // 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email); // 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute(); $firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute(); $firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute(); echo "新记录插入成功"; $stmt->close();
$conn->close();
?>
解析以下实例的每行代码:
"INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"
在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。
接下来,让我们来看下 bind_param() 函数:
$stmt->bind_param("sss", $firstname, $lastname, $email);
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。
字符种类
|
代表的数据类型
|
i
|
integer
|
d
|
double
|
s
|
string
|
b
|
blob
|
通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
注意: 如果你想插入其他数据(用户输入),对数据的验证是非常重要的。
MySQLi 预处理语句及绑定结果
所谓绑定结果就是把PHP脚本中的自定义变量绑定到结果集中的相应字段上,这些变量就代表着所查询的记录,绑定结果的示例代码如下:
<?php
$mysqli = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
$query = "select * from MyGuests";
$result = $mysqli->prepare($query); //进行预准备语句查询
$result->execute(); //执行预准备语句
$result->bind_result($id,$firstname,$lastname,$email); //绑定结果
while ($result->fetch()) {
echo $id;
echo $firstname;
echo $lastname;
echo $email;
}
$result->close(); //关闭预准备语句
?>
在绑定结果的时候,脚本中的变量要与结果集中的字段一一对应,绑定完以后,通过fetch()方法将绑定在结果集中的变量一一取出来,最后将预准备语句和数据库连接分别关闭。
MySQLi 同时绑定参数和绑定结果
在一个脚本中还可以同时绑定参数和绑定结果,示例代码如下:
<?php
$conn = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
$query = "select * from MyGuests where id < ?";
$result = $conn->prepare($query);
$result->bind_param("i",$id); //绑定参数
$id=4;
$result->execute();
$result->bind_result($id,$number,$name,$age); //绑定结果
while ($result->fetch()) {
echo $id;
echo $firstname;
echo $lastname;
echo $email;
} $result->close();
$conn->close();
?>
4. PHP MySQL 读取数据, 删除及更新
SELECT 语句用于从数据表中读取数据:
1
|
SELECT column_name(s) FROM table_name |
mixed query ( string $query [, int $resultmode ] )
1.面向对象
<?php
$mysqli = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
$query = "select * from MyGuests";
$result = $mysqli->query($query);
if ($result) {
if($result->num_rows>0){ //判断结果集中行的数目是否大于0
while($row = $result->fetch_array() ){ //循环输出结果集中的记录
echo ($row[0])."<br>";
echo ($row[1])."<br>";
echo ($row[2])."<br>";
echo ($row[3])."<br>";
echo "<hr>";
}
}
}else {
echo "查询失败";
}
$result->free();
$mysqli->close();
?>
对于删除记录(delete)、保存记录(insert)和修改记录(update)的操作,也是使用query()方法来执行的,下面是删除记录的例子:
mysqli实现增删改查(转)的更多相关文章
- PHP-----练习-------租房子-----增删改查,多条件查询
练习-------租房子-----增删改查,多条件 一 .题目要求: 二 .做法: [1]建立数据库 [2]封装类文件------DBDA.class.php <?php class DBDA ...
- PDO 增删改查封装的类
Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...
- php中增删改查以及返回结果(一)
虽然毕业后找的第一份正式的工作并不那么令人满意,但是在度过最初的迷茫期后,自己还是决定成为一个程序猿. 最近也是利用上班偶尔闲下来的时间,开始看书,撸代码,写一些小程序. 这两个礼拜主要的写的都是有关 ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
系列目录 文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下. 这讲主要是,制作漂亮的工具栏,虽 ...
- 通过Java代码实现对数据库的数据进行操作:增删改查
在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao xingming xue ...
- Hibernate全套增删改查+分页
1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...
- 使用 Json.Net 对Json文本进行 增删改查
JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码 #region Create (从零创建) public static strin ...
随机推荐
- 格式化输出的三种方式,运算符及流程控制之if判断
''' 格式化输出的三种方式,运算符及流程控制之if判断 ''' # 格式化输出的三种方式 # 一.占位符 程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式 比如要求用户输入用户名和年龄 ...
- keep-alive实现返回保留筛选条件及筛选结果
实现页面返回时,保留筛选条件和筛选结果 说明 . keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM 实现 结合router实现部分页面缓存 模板应用 ...
- shell知识点(二)
Shell 中的数组 Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: 方式2: arr=(value1 value2 value3) (这种方式带值) ...
- jquery 图片切换
仿着写的一个jquery的图片切换小插件,代码如下: html: <!DOCTYPE html> <html lang="en"> <head> ...
- Python&R:警告信息管理
计算机程序有时很人性化,比如给你警告提示信息: 计算机程序有时又非常不人性化,比如动不动就给你警告提示...... 如果你的程序是要给客户使用,有运行美化要求: 再尤其是比如警告出现在循环里的情况,那 ...
- vue 中监听窗口发生变化,触发监听事件, window.onresize && window.addEventListener('resize',fn) ,window.onresize无效的处理方式
// 开始这样写,不执行 window.onresize = function() { console.log('窗口发生变化') } // 改成window监听事件 window.addEventL ...
- C# DataGridView 更改类型 重绘
DataGridView 更改类型 需要用到重绘 DataGridViewTextBoxColumn aa01 = new DataGridViewTextBoxColumn(); aa00.Da ...
- ZOJ - 3780-Paint the Grid Again-(拓扑排序)
Description Leo has a grid with N × N cells. He wants to paint each cell with a specific color (eith ...
- R_Studio模拟学生成绩对数据简单分析
模拟产生学生名单,记录高数,英语,网站开发三科成绩,然后进行统计分析 假设有100名学生,起始学号为161304000,各科成绩取整 高数成绩为均匀分布随机函数,都在75分以上 英语成绩为正态分布,平 ...
- springboot 使用redis
安装redis教程:https://www.cnblogs.com/nongzihong/p/10190489.html 依赖: <!--配置redis--> <dependency ...