(独孤九剑)---PHP操作MySQL数据库
【一】开启mysql扩展
在PHP操作MySQL数据库之前,要保证开启了MySQL数据库扩展
若未开启,则可以将php.int文件下的php_mysql开启即可,方式为去掉前面的封号;
配置完成后要重启服务器
【二】数据库连接步骤
(1)连接服务器和数据库
语法:mysqli_connect(主机,登录名,密码,数据库名,数据库服务器端口号);
案例:登录名和密码为root,连接user数据库
$connect = mysqli_connect('localhost','root','root','user','3306');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功";
}
注意:若本步骤已填写了数据库,则跳过第3步
数据库端口号可不填,默认3306
(2)判断错误
语法:mysqli_error(返回的资源);
类型:boolean(true,false)
返回连接错误,无错误则返回0,即true
(3)连接数据库
语法:mysqli_select_db(服务器,数据库);
案例:仅连接了服务器,未连接数据库
$connect = mysqli_connect('localhost','root','root');
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功";
}
(4)设置字符集
语法:mysqli_set_charset(mysqli_connect返回的资源,字符集类型);
(5)准备SQL语句
通常需要把变量赋值在SQL语句里使用
案例:user表里增加数据
$sql = "insert into user(name,password) values('two',456)";
(6)发送SQL语句
语法:mysqli_query(mysqli_connect返回的资源,发送的SQL语句$sql);
SQL语句准备完成后,需要通过mysqli_query()传送到服务器
MySQL服务器会执行发送过来的SQL语句
(7)关闭数据库
语法:mysqil_close(mysqil_connect返回的资源);
mysqli_close($connect);
【三】其他操作
修改SQL语句即可完成其他操作
(1)创建数据库
create database 数据库名;
(2)创建数据库表
create table 表名(字段名1 字段类型1...字段名n 字段类型n);
案例:创建一个表名为user的表,第一个字段为username,字段类型为varchar,长度为32;第二个字段为password,字段类型为varchar,长度为32.
create table user(username varchar(32),password varchar(32));
(3)删除数据库表
drop table 表名;
(4)插入数据
insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
案例:将表单数据,通过post提交到数据库
demo.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo测试</title>
</head>
<body>
<form action="./index.php" method="post">
姓名:<input type="text" name="username"><hr>
密码:<input type="password" name="pwd"><hr>
<input type="submit" value="提交按钮">
</form>
</body>
</html>
index.php:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php
$connect = mysqli_connect('localhost','root','root');
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
$name = $_POST['username'];
$pwd = $_POST['pwd'];
mysqli_query($connect,"INSERT INTO user (name, password)
VALUES ('$name','$pwd')");
$close = mysqli_close($connect);
if(!$close){
die("关闭数据库失败");
}else{
echo "关闭成功";
}
?>
(5)查询数据
选择,从表中选取数据展示select* from 表名 where;
案例:从数据库选取数据展示到HTML表格
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php
$connect = mysqli_connect('localhost','root','root');
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
$name = $_POST['username'];
$pwd = $_POST['pwd'];
//查询结果
$result = mysqli_query($connect,"select* from user");
//判断查询结果
if($result && mysqli_num_rows($result)){//有结果集且结果集不为空
echo "<table border=1 cellspacing=0>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['password']."</td>";
echo "<tr/>";
}
echo "</table>";
}else{
echo "没有数据";
}
$close = mysqli_close($connect);
if(!$close){
die("关闭数据库失败");
}else{
echo "关闭成功";
}
?>
拓展:遍历数据读取
mysqli_fetch_array(结果变量,[数组类型,可选]);
mysqli_num返回索引数组;mysqli_assoc返回关联数组;mysqli_both返回索引数组和关联数组;
$result 变量中存放由 mysql_query() 函数返回的数据。接下来,我们使用 mysql_fetch_array() 函数以数组的形式从记录集返回第一行。每个随后对 mysql_fetch_array() 函数的调用都会返回记录集中的下一行。 while loop 语句会循环记录集中的所有记录。为了输出每行的值,我们使用了 PHP 的 $row 变量 ($row['FirstName'] 和 $row['LastName'])。
(6)条件查询
select语句后加入where条件筛选
案例:查询name为tony的数据
select* from user where name='tony'
条件:=,!=,>,<,<=,=>,between(范围值),like(匹配模式)
(7)结果集排序
order by 字段名;
案例:根据名字进行排序
select* from user order by name
升序:asc;降序:desc;
(8)改动 / 更新update
更新,更新数据update 表名 set 表名 字段名=字段值 where 条件;
(9)删除delete
删除,删除数据delete from 表名 where 条件;
注意:删除和更新尾部需加where条件,否则会影响整个表单
(拓展)设置主键和自增字段
每个表都应有一个主键字段。
主键用于对表中的行进行唯一标识。每个主键值在表中必须是唯一的。此外,主键字段不能为空,这是由于数据库引擎需要一个值来对记录进行定位。
主键字段永远要被编入索引。这条规则没有例外。你必须对主键字段进行索引,这样数据库引擎才能快速定位给予该键值的行。
下面的例子把 personID 字段设置为主键字段。主键字段通常是 ID 号,且通常使用auto_increment设置。auto_increment会在新记录被添加时逐一增加该字段的值。要确保主键字
段不为空,我们必须向该字段添加not null设置。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php
$connect = mysqli_connect('localhost','root','root');
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
//SQL语句
$sql = "create table user(
personID int not null auto_increment,
primary key(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysqli_query($connect,$sql);
$close = mysqli_close($connect);
if(!$close){
die("关闭数据库失败");
}else{
echo "关闭成功";
}
?>
(拓展)
①MySQL数据类型
int为整型;float浮点型;char和varchar字符串;date时间类型
②日期数据格式:
date(yyyy-mm-dd)
datetime(yyyy-mm-dd hh:mm:ss)
timestamp(yyyymmddhhmmss)
time(hh:mm:ss)
【四】注册案例
注意点:
(1)去除两端空格
场景:输入密码时,可能在左右多打空格,因此可以使用trim()消除两端空格
<?php
$value = ' to ny ';
echo strlen(trim($value));//因为使用了trim(),所以会去除两端空格
?>
(2)注册时加上IP和时间
$username = trim($_POST['username']);
$password = md5(trim($_POST['password']));//md5加密
$time = time();//注册时间
$ip = $_SERVER['REMOTE_ADDR'];//注册的IP
(3)密码加密
$password = md5(trim($_POST['password']));//md5加密
(4)步骤:连接数据库,判断错误,设置字符集
$connect = mysqli_connect('localhost','root','root','user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
mysql_set_charset('$connect','utf-8');//注意:连接点为字符串形式
【五】后台列表显示
可以用上面select语句查询显示,做一个后台用户列表。通过后台来修改用户和密码的相关信息
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php
include 'config.php';
$connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
//查询结果
$result = mysqli_query($connect,"select* from user");
$data = mysqli_fetch_assoc($result);
//判断查询结果
if ($result&&mysqli_num_rows($result)) {
echo "<table border=1 cellspacing=0>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['password']."</td>";
echo "<td><a href='delete.php?name='".$row['name'].">删除用户</a></td>";
echo "<td><a href='edit.php?name='".$row['name'].">编辑用户</a></td>";
echo "<tr/>";
}
echo "</table>";
}else{
echo "没有数据";
} $close = mysqli_close($connect);
if(!$close){
die("关闭数据库失败");
}else{
echo "关闭成功";
}
?>
【六】根据id增加编辑和删除命令
(1)删除的时候分为单选删除和多选删除
(2)编辑的时候只能选择一个用户
下面依次介绍
(1)单选删除
单选删除可以在delete.php后跟上?,然后加上id和值,点击时即可进行删除
echo "<td><a href='delete.php?id='".$row['id'].">删除用户</a></td>";
(2)编辑
编辑用户也是如此,在edit.php后跟上?,然后加上id和值,点击即可知道编辑哪个用户了
(3)多选删除
多选删除需要checkbox,传入多个用户id时需要在name后加id[],使用form表单将表格包起来,在表格外加上一个submit标签即实现了多选删除
(4)将用户分页
①分页的几个基本元素:首页,尾页,当前页,上页,下页
②控制页码时,通过URL传入页码值即可实现页码控制。在page.php后加上页码相关信息,即可算出有效信息
③原理:通过limit(偏移量offect,数量num)实现真正分页,原理对比图
页码 URL中get值 偏移量 数量
第1页 1 0 5
第2页 2 5 5
第3页 3 10 5
第n页 n (n-1)*5 5
④数字转换
避免页面存在小数,所以要做强制类型转换:(int)$_GET['page']
写法一:首次没有传page时,默认第1页
$page = isset($_GET['page']) ? (int)$_GET['page']:1 ;
写法二:原理与写法一类似
if(isset($_GET_['page'])){
$page = (int) $_GET_['page'];
}else{
$page = 1;
}
④最后一页
每一页都是整数,包括最后一页。如计算出20.3个页面,则要向上取整函数ceil()
$one = 3;
$two = 2;
$result = $one / $two;
echo ceil($result);//向上取整函数ceil()
⑤上下页边缘控制
最后一页点击下一页,会导致分页时无数据显示。这时便要考虑清楚
如分页在第1页减1时,让其为第1页;若在最后1页加1时,让其为最后1页
⑥计算总页数
$count_sql = 'select count(name) as c from user';//select count() as c from user;从user表取总数,c为别名
$result = mysqli_query($connect,$count_sql);
$data = mysqli_fetch_assoc($result);
$count = $data['c'];
【七】删除用户信息
(1)指定 / 单行删除
单行是通过GET传参方式向delete.php文件里写上对应ID
(2)批量删除
多个删除是通过POST方式向delete.php页面传递对应的ID
if(is_array($_POST['id'])){
$id = join(',',$_POST['id']);
}elseif(is_numeric($_GET['id'])){
$id = (int)$_GET['id'];
}
知识点:
①is_array()判断是否为数组;
②join()函数是implode()函数的别名,返回由数组元素组合成的字符串
<?php
$arr = array("hello", "world");
$str = join("|", $arr);
echo $str; //输出hello|word
?>
③is_numeric — 检测变量是否为数字或数字字符
原理:
join函数将多选删除传来的id变为3,4,5,的格式,
最终多选删除的SQL语句执行出来的效果就是delete from user where id in(3,4,5);
单选删除语句效果就是delete from user where id in(3);
这样便实现了单选和多选的自适应
$sql = "delete from user where id in($id)"
(3)都不符和的话,则视为数据不合法
【八】修改用户信息
index.php,edit.php,change.php
具体代码在PHP修改用户信息做了总结
【九】显示乱码的解决方案
下篇文章做总结
注意:
①单选删除和编辑时,需要使用get方法传入id,才能知道要操作的用户;
②多选删除时,需要传入多个用户。因此可以使用form表单,使用post方法提交用户id
③每个需要数据库的页面都需要连接一次数据库,可以用include来操作
【总结】
(1)SQL对大小写不敏感,所以增删改查的增语法INSERT INTO 与 insert into 相同
(2)数据库版本信息:mysqli_get_server_info(连接点);
(3)?相当于get传参
(4)可以写一个配置文件config.php,将配置设为常量。然后在需要的页面用include调用
<?php
//数据库服务器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库密码
define('DB_PWD', 'root');
//数据库名
define('DB_NAME', 'user');
//字符集
define('DB_CHARSET', 'utf8');
?>
调用:
include 'config.php';
$connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME);
mysqli_select_db($connect,'user');
if(!$connect){
die("could not connect:".mysqli_error());
}else{
echo "连接成功<br>";
}
$close = mysqli_close($connect);
if(!$close){
die("关闭数据库失败");
}else{
echo "关闭成功";
}
(独孤九剑)---PHP操作MySQL数据库的更多相关文章
- PHP操作MySQL数据库5个步骤
PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- PHP操作mysql数据库:[2]查询数据听语音
本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料 Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言 ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
- JDBC操作MySQL数据库案例
JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- shell脚本操作mysql数据库
shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改.查)等各种操作 mysql -hhostname -Pport -uusername -pp ...
- Java使用Jdbc操作MySql数据库(一)
这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
随机推荐
- MySQL-删除数据(DELECT)
数据库备份介绍: 数据库一旦删除数据,它就会永远消失. 因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据. MySQL提供了非常有用的工具,用于在服务器上本地备份或转储M ...
- 【bzoj4385】[POI2015]Wilcze doły
单调队列扫描,记录当前区间长度为d的一段的和的最大值,和当前区间和. #include<algorithm> #include<iostream> #include<cs ...
- 【POI2007】【Bzoj 1103】大都市meg
http://www.lydsy.com/JudgeOnline/problem.php?id=1103 在线查询某点到根节点的点权和,参考DFS序&欧拉序列,用树状数组维护即可O(nlogn ...
- 手推FP-growth (频繁模式增长)算法------挖掘频繁项集
一.频繁项集挖掘为什么会出现FP-growth呢? 原因:这得从Apriori算法的原理说起,Apriori会产生大量候选项集(就是连接后产生的),在剪枝时,需要扫描整个数据库(就是给出的数据),通过 ...
- [Shell学习笔记] read命令从键盘或文件中获取标准输入(转载)
转自:http://www.1987.name/151.html read命令是用于从终端或者文件中读取输入的内部命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如果没有 ...
- P3174 [HAOI2009]毛毛虫(树形dp)
P3174 [HAOI2009]毛毛虫 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边 ...
- bzoj4534: 基础排序算法练习题
传送门 策爷的论文题啊……题解在这儿 我只想知道为什么这题的弱化版会出现在我们今天的%你赛里…… 题意:给你一堆操作$(l,r)$,表示将区间$(l,r)$按升序排序.以及$q$个询问,每次询 ...
- ----堆栈 STL 函数库 ----有待补充
#include<cstdio> #include<string> #include<vector> #include<iostream> using ...
- 洛谷 P1414 又是毕业季II(未完成)
题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...
- ACM_Plants vs. Zombies(一元一次方程)
Plants vs. Zombies Time Limit: 2000/1000ms (Java/Others) Problem Description: There is a zombie on y ...