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實現功能。