php筆記
導(dǎo)讀
- wamp
- 集成開發(fā)環(huán)境
- w:windows 操作系統(tǒng) mamp lamp
- a:apache 服務(wù)器 // 提供某種特定功能的代碼塊 web服務(wù)器 發(fā)送/接收請(qǐng)求
- m:mysql 數(shù)據(jù)庫(kù)服務(wù) // 關(guān)系型/非關(guān)系型 (MongoDB) 關(guān)系模型
- p: php 是運(yùn)行在服務(wù)器端的腳本語言
- 靜態(tài)網(wǎng)頁(yè)
- 沒有鏈接數(shù)據(jù)庫(kù)的網(wǎng)頁(yè)
- 動(dòng)態(tài)網(wǎng)頁(yè)
- 鏈接數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)
服務(wù)器如何處理用戶請(qǐng)求
當(dāng)在地址欄鍵下地址的時(shí)候喷好,瀏覽器會(huì)結(jié)合我們的軟硬件,將http請(qǐng)求發(fā)送到網(wǎng)絡(luò)中搁料,服務(wù)器接收到我們的請(qǐng)求,開始處理我們的請(qǐng)求庆聘,請(qǐng)求的資源分為靜態(tài)資源和動(dòng)態(tài)資源锐借,靜態(tài)資源像:.html, .css, .js等這些后綴名的文件,動(dòng)態(tài)資源像.php,.java等這些資源疗杉,服務(wù)器碰到請(qǐng)求是靜態(tài)資源會(huì)直接返回阵谚,碰到動(dòng)態(tài)資源會(huì)先解析,php文件最終輸出的內(nèi)容將會(huì)交給服務(wù)器烟具,最后服務(wù)器返回輸出的內(nèi)容梢什,當(dāng)瀏覽器接收到返回的內(nèi)容,開始繪制朝聋,碰到href,src,url這些東西的時(shí)候嗡午,會(huì)再次向服務(wù)器發(fā)送請(qǐng)求,最終呈現(xiàn)整個(gè)頁(yè)面
靜態(tài)資源 .html .css .js .jpg .gif .png 以字符串的形式直接返回玖翅,不做處理
動(dòng)態(tài)資源 .php .jsp (php)解析器處理文件 把echo的東西返回
php
php是什么翼馆?
超文本預(yù)處理語言,運(yùn)行在服務(wù)器端金度,能和html進(jìn)行嵌套用于制作動(dòng)態(tài)網(wǎng)頁(yè)的語言
php特點(diǎn)
- 運(yùn)行在服務(wù)器端的腳本語言
- 能支持絕大部分的操作系統(tǒng)
- 能支持大部分的服務(wù)器 apache IIS
- 能支持大部分的數(shù)據(jù)庫(kù) mysql sql sever Access
- 能操作數(shù)據(jù)庫(kù)
- 能操作文件
- 能操作圖片
- ...
php基本語法
exit 結(jié)束運(yùn)行 可以用來調(diào)錯(cuò)
die() 結(jié)束運(yùn)行
變量和常量
輸出php的兩種方式
1. echo 輸出字符串
2. var_dump() 輸出類型和值
錯(cuò)誤的幾種情況
1. error 致命性的錯(cuò)誤 停止執(zhí)行
2. notice 錯(cuò)誤 繼續(xù)執(zhí)行
3. warning 錯(cuò)誤 繼續(xù)執(zhí)行
定義變量
$str = '123';
var_dump($str); //string '123' (length=3)
定義常量
// define("PI", 3.14);
const PI = 3.14;
var_dump(PI);
常量和變量的區(qū)別
- 常量的值不能再改變或者是被刪除
- 常量不加$
- 常量只能用const或者是define來定義
- 常量可以在任何位置去訪問
- 常量的值不能延遲求值,只能是標(biāo)量(const 不可以严沥,define可以)
判斷變量和常量是否被定義
- 判斷一個(gè)變量有沒有定義用isset()
- 判斷一個(gè)常量有沒有定義用defined()
- 當(dāng)一個(gè)變量值為null的時(shí)候猜极。被認(rèn)為是沒有定義
var_dump($nub = null);
var_dump(isset($nub));
const PI = 123;
var_dump(defined('PI'));
刪除變量
unset()
$num = 200;
// $num = null;
unset($num);
var_dump($num); //notice null
變量引用 &
$nub1 = 200;
$nub2 = $nub1;
$nub1 = 300;
echo $nub2; //200
-----------------------------------------------------------
$nub1 = 200;
$nub2 = &$nub1;
$nub1 = 300;
echo $nub2; //300
可變變量
$nub = "age";
$$nub = "123";
var_dump($$nub); // string '123' (length=3)
數(shù)據(jù)類型
4種標(biāo)量 2種復(fù)合類型 2種特殊類型
4種標(biāo)量
- 整型 int
- 浮點(diǎn)型 float 也作double
- 字符串 string
- . 表示連接 //可以連接兩個(gè)標(biāo)量類型,連接成字符串
- ""可以解析變量
$nub = 200; $str1 = "這是一個(gè)數(shù)字{$nub}nub"; //""可以解析變量 $str2 = '這是一個(gè)數(shù)字'.$nub; //. 表示連接,可以連接兩個(gè)標(biāo)量類型消玄,連接成字符串 var_dump($str1, $str2) //string '這是一個(gè)數(shù)字200nub' (length=24) //string '這是一個(gè)數(shù)字200' (length=21)
- 布爾類型 boolean
2種復(fù)合類型
數(shù)組
-
數(shù)組的長(zhǎng)度
$arr = array('a', 'b', 'c'); var_dump(count($arr)) ;//數(shù)組的長(zhǎng)度
-
索引數(shù)組
echo "<pre>"; $arr = array("a", "b", "c"); var_dump($arr); /*array (size=3) 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => string 'c' (length=1) print_r($arr); /*Array ( [0] => a [1] => b [2] => c )
-
關(guān)聯(lián)數(shù)組
$crr = array( 'name' => 'lisi', 'age' => 13 ); /* array (size=2) 'name' => string 'lisi' (length=4) 'age' => int 13
-
二維數(shù)組
$brr = array( 'name' => array( 'lisi' => '13', 'zhangsan' => '24' ), 'age' => 18 );
-
遍歷方式
for ($i=0; $i < count($arr); $i++) { var_dump($arr[$i]); }
$arr = array('name' => 'lisi', 'age' => 13); foreach ($arr as $key => $value) { var_dump($arr[$key]); //lisi 13 var_dump($key); //name age var_dump($value); //lisi 13 }
對(duì)象
2種特殊類型
- null //函數(shù)默認(rèn)返回值 變量未定義 unset()
- resource
- 引用
- is_resource() //判斷是否是資源
獲取跟伏、判斷、轉(zhuǎn)化類型的方式
-
獲取類型
- gettype()
-
判斷類型
- is_int
- is_integer
- is_float
- is_double
- is_string
- is_bool
- is_array
- is_object
- is_null
- is_resource
-
類型轉(zhuǎn)化
-
val
- intval()
- floatval()
- doubleval()
- strval()
// 將true轉(zhuǎn)化為1翩瓜,將false轉(zhuǎn)化為'';
- boolval()
// false 0 '0' '' null 空數(shù)組
-
強(qiáng)制類型轉(zhuǎn)化
$nub = '123'; $result = (int) $nub; var_dump($result); //int 123
settype //不建議 因?yàn)闀?huì)改變?cè)瓉淼念愋?/p>
-
對(duì)象
js:屬性和方法
PHP:成員變量和成員方法
面向過程\對(duì)象編程
-
面向過程編程
一個(gè)功能對(duì)應(yīng)一個(gè)函數(shù)受扳,需要什么樣的功能,寫什么樣的函數(shù)
-
面向?qū)ο缶幊?/p>
將整個(gè)項(xiàng)目中的每一部分抽象為一個(gè)對(duì)象兔跌,只需關(guān)注對(duì)象和對(duì)象之間的聯(lián)系,然后實(shí)現(xiàn)對(duì)象的成員方法勘高,從而構(gòu)建整個(gè)項(xiàng)目
對(duì)象和類的關(guān)系
類是對(duì)象的抽象
我們將具有某種相似特征的對(duì)象的基礎(chǔ)上,抽象為一個(gè)用來描述或者用來創(chuàng)建這些對(duì)象的類坟桅,所以我們說類是對(duì)象的抽象华望,比如說,我們將所有的人的特征抽象為人類的這個(gè)概念
對(duì)象是類的實(shí)例化
有了包含一些特征的抽象出來的類以后仅乓,那么我們可以通過這個(gè)類赖舟,去創(chuàng)建對(duì)象,所以說對(duì)象是類的實(shí)例化夸楣,比如說小明是人類的一個(gè)實(shí)例
封裝宾抓、繼承子漩、多態(tài)
封裝
我們將對(duì)象的成員變量或者成員方法通過一些關(guān)鍵字,比如 public private protected 等去封裝在類的內(nèi)部石洗,只留和外界的接口
- 強(qiáng)內(nèi)聚 //我們傾向于將更多的方法或者是變量封裝在類的內(nèi)部
- 低耦合 //我們傾向于將更少的方法暴露在外部
繼承
一個(gè)類繼承于另外一個(gè)類幢泼,從而獲取這個(gè)類的成員變量和方法,通過 extends 去繼承
子類 父類
多態(tài)
不同的對(duì)象調(diào)用同一個(gè)方法劲腿,或者是相同的操作旭绒,結(jié)果不同,就是多態(tài)
實(shí)例
常用方法
字符串方法
方法 | 描述 | 例子 |
---|---|---|
strlen() | 字符串長(zhǎng)度 | $result = strlen('length'); var_dump($result); // 6 |
explode() | 把字符串分割成數(shù)組 | $result = explode('.' , 'aa.jpg'); var_dump($result); // array('aa', 'jpg') |
substr() | 從當(dāng)前字符串截取指定位置到指定長(zhǎng)度的新字符串 | $str = 'dfsdg'; $result = substr($str,-3,1); var_dump($result); // 's' |
mb_substr() | 字符數(shù) 可以轉(zhuǎn)化編碼 | $str = '字符串';$result = mb_substr($str,3,1,'utf8'); var_dump($result); // '符串' |
strstr() | 返回從當(dāng)前字符串中匹配到的第一個(gè)字符之后的字符串 | $str = 'fghg'; $result = strstr($str,'h',true); var_dump($result); // 'hg' |
strpos() | 查找指定字符首次出現(xiàn)的位置焦人,返回索引值 | |
strrpos() | 查找指定字符最后一次出現(xiàn)的位置挥吵,返回索引值 | |
str_replace() | 替換 (字符串和字符串,數(shù)組和字符串) | |
str_ireplace() | 替換花椭,不區(qū)分大小寫 | |
md5() | 計(jì)算字符串的 MD5 散列 用于加密 | |
strrev() | 反轉(zhuǎn)字符串順序 | |
strtolower() | 小寫 | |
strtoupper() | 大寫 | |
trim() | 去兩端空格 | |
rtrim() | 去右端空格 | |
ltrim() | 去左端空格 |
數(shù)組方法
方法 | 作用 | 例子 |
---|---|---|
array_push() | 在數(shù)組后面推入新項(xiàng) | `````` |
array_pop() | 刪除數(shù)組最后一項(xiàng) | |
array_shift() | 刪除數(shù)組前面一項(xiàng) | |
array_unshift() | 在數(shù)組前面推入新項(xiàng) | |
array_sum() | 數(shù)組項(xiàng)求和 | |
array_merge() | 合并數(shù)組 如果有相同的鍵值那么后者就會(huì)覆蓋前者 | |
array_unique() | 去重 | |
array_rand() | 隨機(jī)取鍵 在一個(gè)數(shù)組中取隨機(jī)的鍵忽匈,如果取多個(gè),返回的是鍵組成的數(shù)組 | |
in_array() | 判斷某個(gè)值在不在數(shù)組里 是否啟用全等 | |
array_search() | 查找某個(gè)值對(duì)應(yīng)的鍵 返回索引值 若找不到返回false | |
array_key_exists() | 判斷某個(gè)值是不是數(shù)組的鍵矿辽,在返回true丹允,不在返回false | |
array_filter() | 篩選 返回值是新數(shù)組,接收回調(diào)函數(shù) | |
array_walk() | 遍歷 將每一個(gè)值都執(zhí)行一個(gè)函數(shù) | |
array_map() | 映射 | |
array_keys() | 鍵組成數(shù)組 如果有第二個(gè)參數(shù)袋倔,那么只會(huì)返回與第二個(gè)參數(shù)匹配的鍵 | |
array_values() | 返回 值組成的數(shù)組 | |
sort() | 升序 會(huì)影響原數(shù)組 | |
rsort() | 降序 | |
asort() | 升序 鍵不重排 | |
arsort() | 降序 鍵不重排 | |
ksort() | 按鍵 升序 | |
krsort() | 按鍵 降序 |
?
Math方法
方法 | 作用 | |
---|---|---|
abs() | ||
ceil() | ||
floor() | ||
max() | ||
min() | ||
round() | ||
mt_rand | 隨機(jī)數(shù) | |
pow() | 返回 x 的 y 次方 |
函數(shù)
參數(shù)
- 如果定義了形式參數(shù)雕蔽,必須傳實(shí)際參數(shù)
- 檢測(cè)函數(shù)是否存在
- 可變函數(shù)
作用域
- 全局變量只能在全局訪問,局部變量只能在局部訪問
- 常量在任何位置都可以訪問
- 超全局變量在任何位置都可以訪問
- $_GLOBALS
- $_GET
- $_POST
- $_REQUEST //get()方法 post()方法 都可以接受
- $_FILES
- $_SERVER
- $_SESSION 服務(wù)器端session
- $_COOKIE
- 在函數(shù)內(nèi)部訪問全局變量的三種方式
//第一種方式
$nub = 200;
function fun(&$aa)
{
$aa = 300;
echo $aa; //300
}
fun($nub);
echo $nub; //300
//第二種方式
$nub = 200;
function fun()
{
global $nub;
$nub = 300;
echo $nub; //300
}
fun();
echo $nub; //300
//第三種方式
$nub = 200;
function fun()
{
$GLOBALS['nub'] = 300;
echo $GLOBALS['nub']; // 300
}
fun();
注意
//
header(string: 'content-type:text/html;charset=utf8');
//
echo true; //1
echo false; //null
var_dump((int) 'a'); //0
// 實(shí)現(xiàn)代碼塊復(fù)用
include ''; //不建議用
include_once ''; //報(bào)warning
require_once ''; //報(bào)error
// 回調(diào)函數(shù)
function callback()
{
return 3;
}
function fun($callback)
{
echo($callback());
}
fun('callback'); //3
// 靜態(tài)變量
function fun()
{
static $nub = 200; //靜態(tài)變量
$nub += 1;
echo $nub;
}
fun(); //201
fun(); //202
fun(); //203
時(shí)間函數(shù)
北京時(shí)間 = GMI + 8
方法
-
date_default_timezone_get()
var_dump(date_default_timezone_get()); // string 'UTC' (length=3)
-
date_default_timezone_set()
date_default_timezone_set('Asia/Shanghai');
-
time() // 距離1970年的秒數(shù)
-
var_dump(time()) //int 1506652819
-
-
microtime(true) // 微秒
var_dump(microtime()) //string '0.04552800 1506652891' (length=21) var_dump(microtime(true)) //float 1506652947.956
-
getdate() // 當(dāng)前時(shí)間的細(xì)節(jié)組成的數(shù)組
var_dump(getdate()); array (size=11) 'seconds' => int 28 'minutes' => int 43 'hours' => int 2 'mday' => int 29 'wday' => int 5 'mon' => int 9 'year' => int 2017 'yday' => int 271 'weekday' => string 'Friday' (length=6) 'month' => string 'September' (length=9) 0 => int 1506653008
-
date() // 格式化時(shí)間
date_default_timezone_set('Asia/Shanghai'); var_dump(date("Y-m-d H:i:s")); // string '2017-09-29 11:07:48'
-
mktime() // 設(shè)置時(shí)間
var_dump(mktime(8,0,0,8,8,2008)); // int 1218182400 $time = mktime(8,0,0,8,8,2008); $arr = getdate($time); var_dump($arr); /* array (size=11) 'seconds' => int 0 'minutes' => int 0 'hours' => int 8 'mday' => int 8 'wday' => int 5 'mon' => int 8 'year' => int 2008 'yday' => int 220 'weekday' => string 'Friday' (length=6) 'month' => string 'August' (length=6) 0 => int 1218182400 */ $str = date('Y-m-d H:i:s', $time); var_dump($str); //string '2008-08-08 08:00:00' (length=19)
/*a: 'am'
d: 幾日宾娜,兩位數(shù)字
D: 星期幾批狐,3個(gè)英文字母
F: 月份,英文全名
h: 12小時(shí)制的小時(shí)
H: 24小時(shí)制的小時(shí)
g: 12小時(shí)制的小時(shí) 不補(bǔ)零
G: 24小時(shí)制的小時(shí) 不補(bǔ)零
j: 幾日前塔,不足不補(bǔ)零
l: 星期幾嚣艇,英文全名
m: 月份,兩位數(shù)字
n: 月份华弓,兩位數(shù)字 不補(bǔ)零
M: 月份食零,3個(gè)英文字母
s: 秒;
S: 字尾加英文序數(shù), ‘21th’
t: 指定月份的天數(shù)
U: 總秒數(shù)
w: 數(shù)字型的星期幾 0-6
Y: 年 四位數(shù)字
y: 年 兩位數(shù)字
z: 一年中的第幾天; 1-366*/
cookie
cookie 常用于識(shí)別用戶寂屏。cookie 是一種服務(wù)器留在用戶計(jì)算機(jī)上的小文件贰谣。每當(dāng)同一臺(tái)計(jì)算機(jī)通過瀏覽器請(qǐng)求頁(yè)面時(shí),這臺(tái)計(jì)算機(jī)將會(huì)發(fā)送 cookie凑保。通過 PHP冈爹,您能夠創(chuàng)建并取回 cookie 的值。
創(chuàng)建 Cookie
setcookie() 函數(shù)用于設(shè)置 cookie
setcookie() 函數(shù)必須位于 <html> 標(biāo)簽之前
語法 setcookie(name, value, expire, path, domain); 例子 setcookie("user", "runoob", time()+3600);
取回 Cookie 的值
- PHP 的 $_COOKIE 變量用于取回 cookie 的值
<?php
// 輸出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
?>
刪除 Cookie
- 當(dāng)刪除 cookie 時(shí)欧引,您應(yīng)當(dāng)使過期日期變更為過去的時(shí)間點(diǎn)
// 設(shè)置 cookie 過期時(shí)間為過去 1 小時(shí)
setcookie("user", "", time()-3600);
?>
session
Filesystem 函數(shù)
魔術(shù)常量
- _dir_ 當(dāng)前路徑
- _file_ 全路徑 當(dāng)前路徑+文件名
- _line_ 運(yùn)行代碼的當(dāng)前行
PHP Filesystem 函數(shù)
方法 | 描述 | 例子 |
---|---|---|
basename() | 從一個(gè)路徑中 返回文件名 | |
dirname() | 從一個(gè)路徑中 返回路徑 | |
file_exists() | 判斷文件或者路徑存在不存在 | |
is_file() | 判斷這是不是文件 只能識(shí)別當(dāng)前路徑 | |
is_dir() | 判斷這是不是路徑 只能識(shí)別當(dāng)前路徑 | |
rmdir() | 刪除空路徑 | |
unlink() | 刪除文件 | |
is_file() is_dir() 如果需要認(rèn)識(shí)上一級(jí)或是下一級(jí)频伤,需要寫相對(duì)路徑
PHP Directory 函數(shù)
Directory 函數(shù)允許您獲得關(guān)于目錄及其內(nèi)容的信息
方法 | 描述 | 例子 |
---|---|---|
scandir() | 返回指定目錄中的文件和目錄的數(shù)組 '.' '..' | |
mysql
能夠永久存儲(chǔ)信息的字段
SQL 結(jié)構(gòu)化查詢語言 操作數(shù)據(jù)庫(kù)
定義語言
展示庫(kù)/表:
- show databases;
- show tables;
- show create table aa; // 展示創(chuàng)建表的過程
- show create database 206class; // 展示創(chuàng)建庫(kù)的過程
- desc 206class // 展示表 \ 庫(kù)
創(chuàng)建庫(kù)/表
-
創(chuàng)建庫(kù)
create database 206class charset utf8 ; //建立新數(shù)據(jù)庫(kù) 數(shù)據(jù)存儲(chǔ)有很多種方式
-
創(chuàng)建表
use 206class
mysql> create table student (
-> id tinyint(10) unsigned not null primary key auto_increment,
-> name char(100) not null unique key,
-> grade float(5,2) not null default 0.00,
-> updatetime datetime on update current_timestamp not null
-> ) engine=innodb default charset = utf8;
// 存儲(chǔ)引擎(決定存儲(chǔ)效率、安全性)innodb[安全性高芝此、效率低] myisam[安全性低憋肖、效率高] 字符集
增加字段
alter table student add num char(20) not null;
刪除表/庫(kù)/字段
- 刪除表 \ 庫(kù)
drop database myclass \ drop table student
- 刪除字段
alter table student drop num;
修改表名因痛、字段
- 修改表名
use myclass;
rename table aa to user;
- 修改字段
alter table student change grade grades int(10) not null;
alter table student modify grades float(5,2) not null;
alter table student modify updatetime datetime default current_timestamp on update current_timestamp;
操作語言
1. 增
- 插入數(shù)據(jù)
insert into student (name) values ('小馬');
//insert into 表(字段) value (要插入的數(shù)據(jù)一一對(duì)應(yīng));
insert into student (name) values ('小員'),('小程');
insert into student (name,grade) values ('小黑',100);
2. 刪
- 刪除某一行數(shù)據(jù) delete
delete from user; //全刪除了
delete from user where id = 7;
3. 改
- 更新 update
update user set pass=123 ; // 所有
update user set pass=456 where id=10;
update user set pass=789,username='newuser2' where id=10;
4. 查 80-90%
基本查詢
where group by having order by limit
where 查詢?cè)侄? having查詢篩選結(jié)果
查詢表中所有數(shù)據(jù)
use myclass;
select * from student; //select 字段 from 表
where篩選 原字段 查指定數(shù)據(jù)
-
= >= <= <> > <
select * from student where id>=5;
-
and or between in
select * from student where id>4 and id<5; or select * from student where id between 8 and 10; select * from student where id>=8 and id<=10; select * from user where id in (1,2,10,11);
-
模糊查詢
%任意字符 select * from goods where name like '%電'; // 所有以 電 結(jié)尾字段 select * from goods where name like '%電%'; // 所有帶 電 的的字段 select * from goods where name like '電%'; // 所有以 電 開頭的字段 _單個(gè)字符 select * from goods where name like '電_'; \ 電 + 一個(gè)字符 的字段 select * from goods where name like '電__'; \ 電 + 兩個(gè)字符 的字段
-
查null
select * from goods where name is null; select * from goods where name is not null;
投影運(yùn)算
select id,name from student;
select id,name,(shop_price-price)*count as profit from goods;
select id,name, floor((shop_price-price)*count) as profit from goods; // 利潤(rùn)向下取整
select id,name,shop_price-price from goods where shop_price-price>200; //利潤(rùn)超過200
having查詢
select id,name,shop_price-price from goods where shop_price-price>200; //重復(fù)查詢
select id,name,shop_price-price as profit from goods having profit>200; //having
select id,name,shop_price-price as profit from goods where id>4 having profit>200;
max、mix岸更、num鸵膏、avg、count
// 和id... 不對(duì)應(yīng)
select sum(count) as he from goods;
select min(shop_price) as minval from goods;
select avg(shop_price) as avgval from goods;
select max(shop_price) as maxvak from goods;
select count(shop_price) as countval from goods;
分組查詢
select * from goods group by type;
select count(type) from goods group by type; // 每一組的個(gè)數(shù)
select sum(count) from goods group by type; // 某個(gè)列的和
select max(count) from goods group by type; // 某個(gè)列的最大值
select max(count),type from goods group by type; // 某個(gè)列的最小值 // 查詢正確
select max(count),id from goods group by type; // 某個(gè)列的最小值 // 查詢錯(cuò)誤
order查詢
select * from goods order by price desc; asc desc(降序)
limit查詢
select * from goods order by count desc limit 3;
select * from goods order by count desc limit 4,2; //隔4行取兩個(gè) 可以用于分頁(yè)
select * from goods order by count desc limit 10*n,10; //隔10頁(yè)取10個(gè) 用于分頁(yè)
where子查詢
where型子查詢是將上一次查詢的結(jié)果作為條件
select id,name from goods where count=(select max(count) from goods);
select id,name from goods where count in (select count from goods where id>3);
from子查詢
from型子查詢是將上一次查詢的結(jié)果作為臨時(shí)的一張表
select name from (select id,name from goods) as tmp;
select name from (select id,name from goods) as tmp where id > 3 ;
select name from (select id,name from goods where id > 3) as tmp;
exists子查詢
select * from goods where exists (select * from goods where id=1); //整個(gè)表的數(shù)據(jù)
select * from goods where exists (select * from goods where id=7); //Empty set (0.00 sec)
連表查詢
內(nèi)鏈接
作用:根據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系怎炊,從這些表中查詢數(shù)據(jù)谭企。
注意: 內(nèi)連接是從結(jié)果中刪除其他被連接表中沒有匹配行的所有行,所以內(nèi)連接可能會(huì)丟失信息评肆。
重點(diǎn):內(nèi)連接债查,只查匹配行。
select news.*, user.username as uname from news inner join user on news.uid=user.id;
外連接
與內(nèi)連接相比瓜挽,即使沒有匹配行盹廷,也會(huì)返回一個(gè)表的全集。
外連接分為三種:左連接久橙,右連接俄占,全連接。對(duì)應(yīng)SQL:left/right/full outer join淆衷。通常我們省略outer 這個(gè)關(guān)鍵字缸榄。寫成:left/right/full。
重點(diǎn):至少有一方保留全集祝拯,沒有匹配行用NULL代替碰凶。
1)left join,左連接
結(jié)果集保留左表的所有行鹿驼,但只包含第二個(gè)表與第一表匹配的行。第二個(gè)表相應(yīng)的空行被放入NULL值辕宏。
select * from news right join user on news.uid=user.id; //
2)right join畜晰,右連接
右外連接保留了第二個(gè)表的所有行,但只包含第一個(gè)表與第二個(gè)表匹配的行瑞筐。第一個(gè)表相應(yīng)空行被入NULL值凄鼻。
select * from news left join user on news.uid=user.id;
- 權(quán)限管理
- 主鍵 (自增) 唯一標(biāo)識(shí)信息 id
- 內(nèi)容管理系統(tǒng) cms
MVC
1、概念
? MVC全名是Model View Controller聚假,是模型(model)-視圖(view)-控制器(controller)的縮寫块蚌,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯膘格、數(shù)據(jù)峭范、界面顯示分離。
? MVC就是類似三層的一種架構(gòu)瘪贱,主要還是采用封裝(分層)的思想纱控,來降低耦合度辆毡,從而使我們的系統(tǒng)更加的靈活,擴(kuò)展性更好甜害。
2舶掖、內(nèi)容
? Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)尔店。
? View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分眨攘。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的,用來展示呈現(xiàn)數(shù)據(jù)
? Controller(控制器)是應(yīng)用程序中處理用戶交互的部分。通诚荩控制器鲫售,接收請(qǐng)求,定義要做的事情避诽。選擇相應(yīng)的模型龟虎,選擇相應(yīng)的視圖。
3沙庐、優(yōu)點(diǎn)
? (1)大大提高了代碼的可重用性鲤妥。
? (2)將整個(gè)系統(tǒng)劃分為三層,有效的實(shí)現(xiàn)了數(shù)據(jù)和視圖的分離
? (3) 提高整個(gè)系統(tǒng)的邏輯性
瀏覽器發(fā)送請(qǐng)求拱雏,控制器接收到請(qǐng)求棉安,向模型發(fā)出指令,模型對(duì)象在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)后铸抑,返回給控制器贡耽,控制器再向view中發(fā)送結(jié)果,由view層輸出數(shù)據(jù)鹊汛,瀏覽器解釋執(zhí)行
Git
git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)
- 集中式版本控制系統(tǒng)
- 分布式版本控制系統(tǒng)