PHP链接数据库
1. PHP内置函数介绍
先介绍一些PHP的常用函数作为参考,再进行操作就很容易了。
1) 连接数据库
Mysql_connect(ip,用户名,密码) or die (‘连接失败!’);
2) 选择数据库(两种方法)
方法一: Mysql_query(‘use 数据库名’);
方法二: Mysql_select_db(‘数据库名’);
3)设置客户端的字符编码
如果遇到了乱码的问题加入下面这串代码就ok了。
sql_query(set names UTF-8);//解决字符乱码问题
4)执行SQL语句
Mysql_query(SQL语句);
5)从结果集中取得一行作为数组返回查询结果
mysql_fetch_row();
该函数主要用于查询结果集,其区别在于函数的返回值不是一个字符串,而是一个数组。在取出最后一行后,函数将返回false,循环结束。就可以把结果集中的所有数据逐行取出并显示。
实例:
<?php
$sql = mysql_query("select * from table_name");//将表table_name的全部数据存放到$sql
$row = mysql_fetch_row($sql);//获取$sql里面的第一个数据作为数组存储在$row中
if ($_POST["Submit"]=="查询"){
//如果从前端接收到的value为‘查询’
$keyword= $_POST["red"];//从前端接收到的查询关键字存储到$name
$sql = mysql_query("select * from table_name where color like '%".trim($keyword)."%'"); //执行模糊查询
$row = mysql_fetch_row($sql); //逐行获取查询结果,返回值为数组
}
?>
2. 连接数据库
一般在公司里面都是框架的二次开发,不会涉及到自己写连接数据库的代码。说白了,无非是数据库连接的函数使用。
实例:
方式一:
<?php
$link=@Mysql_connect(‘URL’,’数据库账号’,’数据库密码’) or die (‘连接失败!’);
Mysql_select_db(‘数据库名称’) or die (‘选择失败!’);
?>
方式二:
<?php
$myhost = 'localhost:3306'; // mysql服务器主机地址
$myusername = 'root'; // mysql用户名
$mypassword = 'DJun'; // mysql用户名密码
$conn = mysqli_connect($myhost , $myusername , $mypassword );
if(! $connect )
{
die('连接失败: ' . mysqli_error($connect ));
}
mysqli_query($connect , "set names utf8");// 设置编码,防止中文乱码
3. 实现增删改查
增删改查可以通过三种方式实现:命令化界面(CMD)、网页代码、软件。
在命令化的界面和网页代码中,增删改查对应四类SQL语句,原理都是一样的。另外一种方式就是使用如Navicat类似软件图形化操作。简单的为大家介绍四类SQL语句:
1)增添数据
在标准SQL语句中的INSERT语句形式:
INSERT INTO tablename(表名) VALUES(列值);
实例:
INSERT INTO users(id, name, age) VALUES(1102, 'DJun', 21);
而在MySQL中还有另一种形式:
INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;
实例:
INSERT INTO users SET id = 1102, name = 'DJun', age = 21;
2)删除数据
通用语法:
(补充:[WHERE Clause] 表示的是筛选数据的语句 )
DELETE FROM table_name [WHERE Clause]
实例:
DELETE FROM users WHERE name='DJun';
3)修改数据
通用语法:
UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
实例:
UPDATE users SET name='DJun' WHERE id=1102;
4)查询数据
通用语法:
(补充:* 号表示查询全部的数据;若是该表中的每一列数据不是全部都要使用的话,将*改成如id,name等字段。数据量大的话这样处理可增加查询速度)
SELECT * FROM table_name [WHERE Clause];
实例:
用逗号分割,列出需要显示的字段
select id,name,age from users;
数据量大的话均存在数据重复的问题,若需要查询不重复记录该如何处理?如果需要按照条件查询该如何处理?如果是商品重复了,需要统计整合这个商品的数量该如何处理?
查询不重复的数据
通用语法:
select distinct 字段 from 表名;
实例:
select distinct name from users;//查询名字不相同的用户;
select distinct name,age from students;//查询名字和年龄同时不同的用户
注意:
distinct必须放在最开头
distinct只能使用需要去重的字段进行操作。 ----也就是说我distinct了name,age两个字段,我后面想根据id进行排序,是不可以的,因为只 能name,age两个字段进行操作.
distinct去重多个字段时。就是说:几个字段同时重复时才会被过滤。
条件查询
通用语法:
select 字段 from 表名 where 条件;
实例:
select * from users where sex='男' and age>20;
筛选出来的数据如果需要按照年龄来升序(ASC)或降序(DESC)排序的话:
只需在SELECET的语句最后加上 by age ASC或 by age DESC。
如果希望只取出年龄最小的前五个人的数据的话:
select ... [limit 起始偏移量,行数]
SELECT * from users ORDER BY age ASC limit 0,5;
数据整合(聚合)
通用语法:
select 聚合函数(字段) 表名 [where Clause] [group by field1,field2...] [with rollup] [having 条件];
补充:
1. 聚合函数(字段) ,常用的四个聚合函数 : sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
2.group by关键字 表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
3.with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
4.having 关键字表示对分类后的结果再进行条件过滤。
实例:
//得到与id为1的年龄相同的用户的用户名并按照这些用户的注册时间按升序排列
SELECT username,count(1) FROM users GROUP BY age ORDER BY createtime ASC;
//得到与id为1的年龄相同的用户且人数大于4的用户名
SELECT username,count(1) FROM users GROUP BY age HAVING count(1)>4;
//统计与id为1的年龄相同的用户的薪水总额,最低薪资,最高薪资
SELECT count(1),min(salary),max(salary) FROM users GROUP BY age;
实现增删查改,无非是执行相应的sql语句。或者说是执行动态的sql 语句,可以执行在程序中给sql 语句的某个参数赋值后,执行sql实现功能。