PHP+MySQL+Dreamweaver整合教學(PHPMaker運用設計網站教學):快速設計網站與網頁
總教頭特別企畫【專業整合課程】比傳統的學習的還要快速與實用!


感謝您造訪 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地。 你可進入教學詳細內容介紹頁面,詳細瞭解PHP程式設計+MySQL資料庫(PHPMaker運用設計網站教學)及相關技術維護影片教學(完整配套措施),馬上可以設計架站程式與PHP網頁,快速建立MySQL資料庫、自動生成PHP網頁。可對資料庫進行瀏覽、修改、查詢、加入和刪除(整合成我們需要的網站)。

要在網路上經營網站賺大錢,不能只會下載現有的程式來架站(自己設計才能完全符合專業的特殊需求),你不用死背PHP語法,更可以完全不用花錢用購買資料庫(PHPMySQL完全免費!)你可以透過技術學習,讓PHP程式網頁+網路資料庫+Dreamweaver整合教學→讓你快速成為:【動態網站程式設計專家→你能因此賺大錢】!

 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php


PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用教學)密訓基地  總教頭  敬上



瀏覽模式: 普通 | 列表
PHP程式設計問題諮詢:
我怎麼知道系統預設支援什麼函數?


---------------------------------------------------------
PHP程式設計問題回覆:
要怎麼知道系統預設支援什麼函數,請看以下的範例:


<?php
$arr = get_defined_functions();
Function php() {
}
echo  "<pre>";
Echo  "這裏顯示系統所支援的所有函數,和自定以函數php ";
print_r($arr);
echo  "</pre>";
?>

---------------------------------------------------------

改善PHP開發模式的方法

改善PHP開發模式的方法
  
關於如何使用PHP語系來開發應用程式,我們每個人都有自己的技巧和方法。
實際上,我們大家都知道,有很多種模式和方法可以讓開發變得更加簡單。
儘管如此,還是有一些方法,尤其是編碼樣式和習慣,是大家公認的。
我們列舉出了可以改善PHP開發模式的方法。

我們不應該輕視代碼的組織,選取的編碼樣式應該是事先約定好的,許多人只是隨機的在做這些事情,這讓他們的代碼變得十分混亂,十分令人難以理解。

你可以在那裡宣稱自己是最好的開發者,但是,如果你的代碼缺乏良好的組織,你是不會走的太遠的。
舉個例子,比如說,在當地的社區大學中,你是一名教師。
如果你決定從初級和進階的資料中隨機地選取一大堆知識,然後按照這種順序把這些知識教授給你的學生
而不是從初級到進階,循序漸進地教授給你的學生,那麼你的學生們會十分困惑,而且,作為一名教師,他們是不會歡迎你的,如果他們不歡迎你,他們就不會上你的課。

我的觀點是,找出一種適合你的組織方法和編碼樣式,並且一直堅持下去,這樣的話,你的代碼的組織和配置會變得十分有條理。

對於獨立的開發者來說,內定檔案並不是很流行,它主要是面向企業項目和開源項目的。
但是,這並不是說,內定檔案對你的項目沒有好處。對於你的項目來說,內定檔案是改善你的編碼和工作模式的重中之重。

許多支援PHP的整合開發環境(IDE)都支援內定檔案,這可以說明你記住你建立那些函數的時候用了哪些參數,或是,那些函數的功能是什麼?

如果你把你的項目移交給另外一個開發者或團隊,他們一定會對這份內定檔案心存感激的,因為它傳遞了和PHP項目(尤其是那些規模較大的PHP項目)有關的大量訊息。
 

最短的PHP微網誌程式代碼

您知道最短的PHP微網誌程式代碼如何編寫嗎?

最短的PHP微網誌程式。
基本需求是:
1.無亂碼(最好UTF-8)。
2.有輸入框可以發佈新訊息。
3.送出後馬上可以看到新發的內容。
4.必須使用POST模式送出。
5.訊息後面要有時間標示。
6.不能發佈任何HTML標籤。


<?php
header("content-type:text/html; charset=utf-8");
$a=@file_get_contents(l);
($p=$_POST[s])&&file_put_contents(l,$a='<hr>'.htmlspecialchars($p).date(' Y-m-d H:i').$a);
echo '<form method=post><input name=s></form>'.$a;
?>

運行效果如圖:

attachments/201205/1553844664.gif

註釋一下:

<?php
header("content-type:text/html; charset=utf-8"); //傳送到utf-8聲明
/*
* 從名叫l的檔案裡面讀取資料。
* php裡面的常量如果沒有先聲明,那麼預設值是等於常量本身的那個字串。
* 也就是說沒有聲明過的l=="l" , ABCD == "ABCD"
*/
$a=@file_get_contents(l);
/*
* a && b; 貌似是php特有的語法結構。 大概意思是 先執行a,
* 然後判斷a是否為true,如果是,那麼繼續執行b
*
* ($p=$_POST[s]) 是先把$_POST[s]的值賦給$p,
* 然後括號的值為$p轉換為布爾型。也就是說,只要$p不是空字串,
* 或是false,或是0,或是null。就會繼續執行後面的語句
*
* 後面操作是把剛剛讀出來的$a的前面加上新的資料,然後寫入l檔案
*/
($p=$_POST[s])&&file_put_contents(l,$a='<hr>'.htmlspecialchars($p).date(' Y-m-d H:i').$a);
/*
* 顯示html語句,用於構造一個可以post送出的輸入框,沒有送出按鈕,直接按換行送出。
* 由於頁面是用utf-8編碼,所以送出的資料也是utf-8編碼
*/
echo '<form method=post><input name=s></form>'.$a;//#註釋2
?>

網站經營一陣子後,內容越來越多(MySql資料庫就會變成很大)
有些架站程式後台可以備份與還原(會自動分割)
所以網站的備份與還原當然沒有問題!
但是萬一你的網站或架站程式並沒有此功能時
您使用phpMyAdmin將MySQL資料庫匯出時當然沒有問題
但是當你要還原(匯入)時,可能就匯出現:MySql檔案過大無法匯入的窘境!
那該怎麼辦呢?


使用phpmyadmin匯出與匯入方式更換MySql Server時
若在匯入時遇到"你正嘗試上載大容量檔案,請查看此文件如何略過此限制"的訊息.這是因為匯入的檔超過限制。

-----------------------------------------------------------
總教頭教你解決的辦法如下:

下載BigDump這個軟體,下載網址:

http://www.ozerov.de/bigdump.zip

官方網址:http://www.ozerov.de/bigdump/

-----------------------------------------------------------

接下來自動將SQL檔案分割上傳:

1. 下載 BigDump
2. 在轉檔Server的Web根目錄下建立暫存目錄(例如:temp),解壓縮bigdump.php與將要匯入的sql檔放於該暫存目錄下
3. 修改bigdump.php檔案

$db_server = ""; //server位址,一般為 "localhost"
$db_name = "AAA"; //MySql資料庫名稱
$db_username = "BBB"; //MySql帳號
$db_password = "CCC"; //MySql密碼

4.匯入mysql檔案:  http://你的網站網址/temp(暫存檔目錄)/bigdump.php
-----------------------------------------------------------
若使用BigDump 後仍然發生 max_allowed_packet 問題

解決方法:

vi /etc/my.ini
在[mysqld]項下增加如下敘述
max_allowed_packet=64M

重新啟動 MySQL 即可大功告成!
-----------------------------------------------------------
標籤: mysql phpMyAdmin

使用php程式的五個小技巧

使用php程式的五個小技巧
 
php程式的一些小技巧,這些比較基礎,總結一下(
如果你是老鳥那就當成複習吧)。

1. str_replace

str_replace是非常常常常常用的php函數,用於字串置換,經常看到某些php新人為了置換一批字串,寫了好多行str_replace,實在是慘不忍睹。

比如這個例子:

$str = '某人的棲息地 --- www.abc.net';

$str = str_replace('某人', '壞人', $str);

$str = str_replace('的', 'di', $str);

$str = str_replace('棲息地', '豬窩窩', $str);

$str = str_replace('www.abc.net', 'abc.net', $str);

以上,置換了4次字串,實際只要換個寫法,一行就搞定了:

$str = '某人的棲息地 --- www.abc.net';

$str = str_replace(array('某人', '的', '棲息地', 'www.abc.net'), array('壞人', 'di', '豬窩窩', 'abc.net'), $str);

 

2. array

經常看到有人拿陣列這樣寫:

echo $arr[some_key];

上面這行代碼能跑,看上去也沒什麼大問題,但是如果你把php.ini的error notice開啟的話,會收到一大批error。
php解析器首先是拿「some_key」當作一個常量來解釋的,但如果沒有定義some_key這樣一個常量,解析器還是很寬容的把它當作了一個字串來看待。
因此新人同學們最好寫完整一點:

echo $arr['some_key'];

這樣就沒有問題了,如果你要把它放在雙引號中連用,也不能省掉引號,可以這樣寫:

echo "這是混在雙引號中的字串{$arr['some_key']}";

 

3. 類型戲法

類型戲法相當好用,比如有一個表單送出過來的變量,標準情況下它應該是整型的,有時候偷懶省去校驗的寫法可以是這樣的:

$intVar = (int)$_POST['post_var'];

再比如陣列,有時候寫鍵值要打引號是不是很不爽啊,我們可以把它轉換成object,比如:

$arr = array('name' => 'volcano', 'sex' => 'male');

$arr = (object)$arr;

echo $arr->name;

echo $arr->sex;

是不是很省事?

 

4. lambda函數

lamda函數和array_*系列函數使用有奇效,拿php手冊上的一個例子來說:

<?php

$av = array("the ", "a ", "that ", "this ");

array_walk($av, create_function('&$v,$k', '$v = $v . "mango";'));

print_r($av);

?>

至少省了一個for迴圈

 

5. 嵌套迴圈顯示表格的單元格

嵌套迴圈顯示表格的單元格,這是一個很老的話題哦,往往會要在某個單元格後邊加個條件判斷什麼的,考慮是不是要輸出tr抑或是td標籤。

俺這裡介紹一個辦法,利用array_chunk函數能夠比較工整的輸出html,見下例,這個例子要輸出一個4行6列的表格:

<?php

$arr = range(1, 24); //這個會生成一個陣列array(1,2,3,4....24)

$arr = array_chunk($arr, 6);

// output table

?>

<table> <?php foreach($arr as $row): ?> <tr> <?php foreach($row as $col):?> <td><?php echo $col?></td> <?php endforeach;?> </tr> <?php endforeach;?> </table>

為什麼我得不到變數(PHP程式教學問與答)

問題:我在一網頁向另一網頁POST資料name,為什麼輸出$name時卻得不到任何值?

技術回覆:在PHP4.2以後的版本中register_global預設為off

  若想取得從另一頁面送出的變數:

方法一:在PHP.ini中找到register_global,並把它設定為on.

方法二:在接收網頁最前面放上這個extract($_POST);extract($_GET);(注意extract($_SESSION)前必須要有Session_Start()).

方法三:一個一個讀取變數$a=$_GET["a"];$b=$_POST["b"]等,這種方法雖然麻煩,但比較安全.

  2:除錯你的程式

在運行時必須知道某個變數為何值。我是這樣做的,建立一檔案debug.php,其內容如下:

<?PHP
Ob_Start();
Session_Start();
Echo "<pre>";

Echo "本頁得到的_GET變數有:";
Print_R($_GET);

Echo "本頁得到的_POST變數有:";
Print_R($_POST);

Echo "本頁得到的_COOKIE變數有:";

Print_R($_COOKIE);

Echo "本頁得到的_SESSION變數有:";
Print_R($_SESSION);
Echo "</pre>";
?>

然後在php.ini中設定:include_path = "c:/php",並將debug.php放在此檔夾,以後就可以在每個網頁裏包括此檔,檢視得到的變數名和值.

  3:如何使用session

凡是與session有關的,之前必須呼叫函數session_start();

為session付值很簡單,如:

<?php
Session_start();
$Name = "這是一個Session例子";
Session_Register("Name");//注意,不要寫成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之後$_SESSION["Name"]為"這是一個Session例子"
?>

在php4.2之後,可以為session直接付值:

<?PHP
Session_Start();
$_SESSION["name"]="value";
?>

取消session可以這樣:

<?php
session_start();
session_unset();
session_destroy();
?>
取消某個session變數在php4.2以上還有BUG.

注意:

1:在呼叫Session_Start()之前不能有任何輸出.例如下面是錯誤的.
==========================================
1行
2行 <?PHP
3行 Session_Start();//之前在第一行已經有輸出
4行 .....
5行 ?>
==========================================


提示1:

凡是出現"........headers already sent..........",就是Session_Start()之前嚮流覽器輸出資訊.

去掉輸出就標準,(COOKIE也會出現這種錯誤,錯誤原因一樣)

提示2:


如果你的Session_Start()放在迴圈語句裏,並且很難確定之前哪裡向流覽器輸出資訊,可以用下面這種方法:

1行 <?PHP Ob_Start(); ?>
........這裏是你的程式......

問題:
請問為什麼我向另一網頁傳送變數時,只得到前半部分,以空格開頭的則全部丟失?


<?php
$Var="hello php";//修改為$Var="   hello php";試試得到什麼結果
$post= "receive.php?Name=".$Var;
header("location:$post");
?>

receive.php的內容:


<?PHP
Echo "<pre>";
Echo  $_GET["Name"];
Echo "</pre>";
?>


回覆:
正確的方法是:


<?php
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
?>

在接收頁面你不需要使用Urldecode(),變數會自動編碼.

PHP程式設計時日期錯誤,PHPDate()出現錯誤的具體解決辦法

PHPDate()出現錯誤的具體解決辦法

PHPDate()出現錯誤對於新手來說是比較頭疼的一件事情。
我們給出了具體的解決方法,希望對大家有所說明。

我們在運用PHPDate()這個函數取得時間資料的時候,經常會遇到不準確等一系列問題。
下面我們將為大家具體講解PHPDate()出現錯誤的關聯解決辦法。


取得系統時間時,發現取得的時間與系統的時間不符。
今天用echo date("Y-m-dH:i:s")取得系統時間時,發現取得的時間與系統的時間不符。

PHP是外國人開發的,所以經常有很多東西不太好用。
研究了一番發現,PHP預設設定的時間是以格林威治時區為標準的,表現是和北京時間差8個小時,因此我們需要將其+8個小時,原理是我們正好位於時區的東8區,所以我們必須把PHP的時區設定改為台北時間。

PHPDate()出現錯誤的具體解決方法:

開啟PHP.ini檔案,一般在PHP的安裝根目錄下
找到其中的:date.timezone
刪掉date.timezone前面的分號,並改成:date.timezone=Asia/Taipei
存檔,並重新啟動Apahce服務(有時用Apache的restart功能會有問題,建議先stop然後再start)
重新檢驗一下echodate("Y-m-dH:i:s")。
是不是時間還原標準了
--------------------------------------------------------------------------------------
如果無法改動PHP.ini檔案,也可以在輸出時間之前使用date_default_timezone_set()設定時區

date_default_timezone_set('Asia/Shanghai');

函數date_default_timezone_set(timezone)與date_default_timezone_get()

以上就是PHPDate()出現錯誤的關聯解決方法。

--------------------------------------------------------------------------------------
調整時區

<?echo date("Y-m-d H:i:s",mktime (date(H)+15, date(i), date(s), date(m), date(d), date(Y)))?>
--------------------------------------------------------------------------------------

PHP程式設計問題諮詢:
要怎麼在函數裏取得函數外的變數值?


---------------------------------------------------------
PHP程式設計問題回覆:
要在函數裏取得函數外的變數值,請看以下的範例:


<?PHP
$a="PHP";
foo();
Function foo()
{
global $a;//刪除這裏看看是什麼結果
Echo "$a";
}
?>
entities(nl2br($str));
?>
---------------------------------------------------------

透視 MySQL資料庫之更新語句(Mssql資料庫教學)

透視 MySQL資料庫之更新語句(Mssql資料庫教學)

用於操作資料庫的SQL一般分為兩種,一種是查詢語句,也就是我們所說的SELECT語句,另外一種就是更新語句,也叫做資料操作語句。
言外之意,就是對資料進行修改。在標準的SQL中有3個語句,它們是INSERT、UPDATE以及DELETE。
在MySQL中又多了一個REPLACE語句,因此,本文以MySQL為背景來討論如何使有SQL中的更新語句。

一、INSERT和REPLACE

INSERT和REPLACE語句的功能都是向表中插入新的資料。這兩條語句的語法類似。它們的主要區別是如何處理重複的資料。

1. INSERT的一般用法

MySQL中的INSERT語句和標準的INSERT不太一樣,在標準的SQL語句中,一次插入一條記錄的INSERT語句只有一種形式。

INSERT INTO tablename(列名…) VALUES(列值);

而在MySQL中還有另外一種形式。

INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;

第一種方法將列名和列值分開了,在使用時,列名必須和列值的數一致。如下面的語句向users表中插入了一條記錄:

INSERT INTO users(id, name, age) VALUES(123, '王曉明', 25);

第二種方法容許列名和列值成對出現和使用,如下面的語句將產生中樣的效果。

INSERT INTO users SET id = 123, name = '王曉明', age = 25;

如果使用了SET模式,必須至少為一列賦值。如果某一個欄位使用了預設值(如預設或自增值),這兩種方法都可以省略這些欄位。
如id欄位上使用了自增值,上面兩條語句可以寫成如下形式:

INSERT INTO users (name, age) VALUES('王曉明',25);

INSERT INTO uses SET name = '王曉明', age = 25;

MySQL在VALUES上也做了些變化。如果VALUES中什麼都不寫,那MySQL將使用表中每一列的預設值來插入新記錄。

INSERT INTO users () VALUES();

如果表名後什麼都不寫,就表示向表中所有的欄位賦值。使用這種模式,不僅在VALUES中的值要和列數一致,而且順序不能顛倒。
INSERT INTO users VALUES(123, '王曉明', 25);

如果將INSERT語句寫成如下形式MySQL將會報錯。

INSERT INTO users VALUES('王曉明',25);
------------------------------------------------------------------------
2. 使用INSERT插入多條記錄

看到這個標題也許大家會問,這有什麼好說的,呼叫多次INSERT語句不就可以插入多條記錄了嗎!
但使用這種方法要增加伺服器的負荷,因為,執行每一次SQL伺服器都要同樣對SQL進行分析、改善等操作。
幸好MySQL提供了另一種解決專案,就是使用一條INSERT語句來插入多條記錄。
這並不是標準的SQL語法,因此只能在MySQL中使用。

INSERT INTO users(name, age)

VALUES('王曉明', 25), ('比爾.蓋茨', 50), ('火星人', 600);

上面的INSERT 語句向users表中連續插入了3條記錄。
值得注意的是,上面的INSERT語句中的VALUES後必須每一條記錄的值放到一對(…)中,中間使用","分割。
假設有一個表table1

CREATE TABLE table1(n INT);

如果要向table1中插入5條記錄,下面寫法是錯誤的:

INSERT INTO table1 (i) VALUES(1,2,3,4,5);

MySQL將會拋出下面的錯誤

ERROR 1136: Column count doesn't match value count at row 1

而正確的寫法應該是這樣:

INSERT INTO t able1(i) VALUES(1),(2),(3),(4),(5);

當然,這種寫法也可以省略列名,這樣每一對括號裡的值的數目必須一致,而且這個數目必須和列數一致。如:

INSERT INTO t able1 VALUES(1),(2),(3),(4),(5);
------------------------------------------------------------------------
3. REPLACE語句

我們在使用資料庫時可能會經常遇到這種情況。如果一個表在一個欄位上建立了唯一索引,當我們再向這個表中使用已經存在的鍵值插入一條記錄,那將會拋出一個主鍵衝突的錯誤。
當然,我們可能想用新記錄的值來覆蓋原來的記錄值。如果使用傳統的做法,必須先使用DELETE語句刪除原先的記錄,然後再使用INSERT插入新的記錄。而在MySQL中為我們提供了一種新的解決專案,這就是REPLACE語句。
使用REPLACE插入一條記錄時,如果不重複,REPLACE就和INSERT的功能一樣,如果有重複記錄,REPLACE就使用新記錄的值來取代原來的記錄值。

使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個原子操作。
這樣就可以不必考慮在同時使用DELETE和INSERT時加入事務等複雜操作了。

在使用REPLACE時,表中必須有唯一索引,而且這個索引所在的欄位不能容許空值,否則REPLACE就和INSERT完全一樣的。

在執行REPLACE後,系統返回了所影響的行數,如果返回1,說明在表中並沒有重複的記錄,如果返回2,說明有一條重複記錄,系統自動先呼叫了DELETE刪除這條記錄,然後再記錄用INSERT來插入這條記錄。
如果返回的值大於2,那說明有多個唯一索引,有多條記錄被刪除和插入。

REPLACE的語法和INSERT非常的相似,如下面的REPLACE語句是插入或更新一條記錄。

REPLACE INTO users (id,name,age) VALUES(123, '趙樹海', 50);

插入多條記錄:

REPLACE INTO users(id, name, age)

VALUES(123, '趙樹海', 50), (134,'Mary',15);

REPLACE也可以使用SET語句

REPLACE INTO users SET id = 123, name = '趙樹海', age = 50;

上面曾提到REPLACE可能影響3條以上的記錄,這是因為在表中有超過一個的唯一索引。在這種情況下,REPLACE將考慮每一個唯一索引,並對每一個索引對應的重複記錄都刪除,然後插入這條新記錄。假設有一個table1表,有3個欄位a, b, c。它們都有一個唯一索引。

CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);

假設table1中已經有了3條記錄

a b c

1 1 1

2 2 2

3 3 3

下面我們使用REPLACE語句向table1中插入一條記錄。

REPLACE INTO table1(a, b, c) VALUES(1,2,3);

返回的結果如下

Query OK, 4 rows affected (0.00 sec)

在table1中的記錄如下

a b c

1 2 3

我們可以看到,REPLACE將原先的3條記錄都刪除了,然後將(1, 2, 3)插入。
------------------------------------------------------------------------
二、UPDATE

UPDATE的功能是更新表中的資料。這的語法和INSERT的第二種用法相似。必須提供表名以及SET表達式,在後面可以加WHERE以限制更新的記錄範圍。

UPDATE table_anem SET column_name1 = value1, column_name2 = value2, ...

WHERE ... ;

如下面的語句將users表中id等於123的記錄的age改為24

UPDATE users SET age = 24 WHERE id = 123;

同樣,可以使用UPDATE更新多個欄位的值 UPDATE users SET age = 24, name = 'Mike' WHERE id = 123;

上面的UPDATE語句通過WHERE指定一個條件,否則,UPDATE將更新表中的所有記錄的值。

在使用UPDATE更新記錄時,如果被更新的欄位的類型和所賦的值不符合時,MySQL將這個值轉換為相應類型的值。如果這個欄位是數值類型,而且所賦值超過了這個資料類型的最大範圍,那麼MySQL就將這個值轉換為這個範圍最大或最小值。如果字串太長,MySQL就將多餘的字串截去。如果設定非空欄位為空,那麼將這個欄位設定為它們的預設值,數字的預設值是0,字串的預設值是空串(不是null,是"")。

有兩種情況UPDATE不會對影響表中的資料。

1. 當WHERE中的條件在表中沒有記錄和它符合時。

2. 當我們將同樣的值賦給某個欄位時,如將欄位abc賦為'123',而abc的原值就是'123'。

和INSERT、REPLACE一樣,UPDATE也返回所更新的記錄數。但這些記錄數並不內含滿足WHERE條件的,但卻未被更新的記錄。如下同的UPDATE語句就未更新任何記錄。

UPDATE users SET age = 30 WHERE id = 12;

Query OK, 0 rows affected (0.00 sec)

需要注意的時,如果一個欄位的類型是TIMESTAMP,那麼這個欄位在其它欄位更新時自動更新。

在有些時候我們需要得到UPDATE所選取的行數,而不是被更新的行數。我們可以通過一些API來達到這個目的。如MySQL提供的C API提供了一個選項可以得到你想要的記錄數。而MySQL的JDBC驅動得到的預設記錄數也是符合的記錄數。

UPDATE和REPLACE基本類似,但是它們之間有兩點不同。

1. UPDATE在沒有符合記錄時什麼都不做,而REPLACE在有重複記錄時更新,在沒有重複記錄時插入。

2. UPDATE可以選取性地更新記錄的一部分欄位。而REPLACE在發現有重複記錄時就將這條記錄徹底刪除,再插入新的記錄。也就是說,將所有的欄位都更新了。
------------------------------------------------------------------------
三、DELETE和TRUNCATE TABLE

在MySQL中有兩種方法可以刪除資料,一種是DELETE語句,另一種是TRUNCATE TABLE語句。DELETE語句可以通過WHERE對要刪除的記錄進行選取。而使用TRUNCATE TABLE將刪除表中的所有記錄。因此,DELETE語句更靈活。

如果要清理表中的所有記錄,可以使用下面的兩種方法:

DELETE FROM table1

TRUNCATE TABLE table1

其中第二條記錄中的TABLE是可選的。

如果要刪除表中的部分記錄,只能使用DELETE語句。

DELETE FROM table1 WHERE ...;

如果DELETE不加WHERE子句,那麼它和TRUNCATE TABLE是一樣的,但它們有一點不同,那就是DELETE可以返回被刪除的記錄數,而TRUNCATE TABLE返回的是0。

如果一個表中有自增欄位,使用TRUNCATE TABLE和沒有WHERE子句的DELETE刪除所有記錄後,這個自增欄位將起始值恢復成1.如果你不想這樣做的話,可以在DELETE語句中加上永真的WHERE,如WHERE 1或WHERE true。

DELETE FROM table1 WHERE 1;

上面的語句在執行時將掃瞄每一條記錄。
但它並不比較,因為這個WHERE條件永遠為true。
這樣做雖然可以保持自增的最大值,但由於它是掃瞄了所有的記錄,因此,它的執行成本要比沒有WHERE子句的DELETE大得多。

DELETE和TRUNCATE TABLE的最大區別是DELETE可以通過WHERE語句選取要刪除的記錄。
但執行得速度不快。
而且還可以返回被刪除的記錄數。
而TRUNCATE TABLE無法刪除特殊的記錄,而且不能返回被刪除的記錄。
但它執行得非常快。

和標準的SQL語句不同,DELETE支援ORDER BY和LIMIT子句,通過這兩個子句,我們可以更好地控制要刪除的記錄。
如當我們只想刪除WHERE子句過濾出來的記錄的一部分,可以使用LIMIB,如果要刪除後幾條記錄,可以通過ORDER BY和LIMIT配合使用。
假設我們要刪除users表中name等於"Mike"的前6條記錄。可以使用如下的DELETE語句:

DELETE FROM users WHERE name = 'Mike' LIMIT 6;

一般MySQL並不確定刪除的這6條記錄是哪6條,為了更保險,我們可以使用ORDER BY對記錄進行排序。

DELETE FROM users WHERE name = 'Mike' ORDER BY id DESC LIMIT 6;
本PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地立志於收集各類PHP程式設計、MySQL資料庫及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!