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


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

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

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

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


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



瀏覽模式: 普通 | 清單

使用PHP執行linux系統指令

如何使用PHP執行linux系統指令呢?
相信這是很多學員想知道答案!

首先先要給大家介紹PHP執行linux系統指令的幾個基本函數。

system函數

說明:執行外部程式並顯示輸出資料。
語法:string system(string command, int [return_var]);
返回值: 字串

詳細介紹:
本函數就像是 C 語中的函數 system(),用來執行指令,並輸出結果。若是 return_var 參數存在,則執行 command 之後的狀態會填入 return_var 中。同樣值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用 EscapeShellCmd()。若 PHP 以模組式的執行,本函數會在每一行輸出後自動更新 Web 伺服器的輸出緩衝暫存區。若需要完整的返回字串,且不想經由不必要的其它中間的輸出介面,可以使用 PassThru()。

案例代碼:
< ?php
$last_line = system('ls', $retval);
echo 'Last line of the output: ' . $last_line;
echo '<hr />Return value: ' . $retval;
?>

exec函數
說明:執行外部程式。
語法:string exec(string command, string [array], int [return_var]);
返回值: 字串

詳細介紹:
本函數執行輸入 command 的外部程式或外部指令。
它的返回字串只是外部程式執行後返回的最後一行;若需要完整的返回字串,可以使用 PassThru() 這個函數。

要是參數 array 存在,command 會將 array 加到參數中執行,若不欲 array 被處理,可以在執行 exec() 之前呼叫 unset()。
若是 return_var 跟 array 二個參數都存在,則執行 command 之後的狀態會填入 return_var 中。

值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用 EscapeShellCmd()。

案例代碼:
<?php
echo exec('whoami');
?>  

popen函數
說明:開啟檔案。
語法:int popen(string command, string mode);
返回值: 整數

詳細介紹:
本函數執行指令開檔,而該檔案是用管道模式處理的檔案。
用本函數開啟的檔案只能是單向的 (只能讀或只能寫),而且一定要用 pclose() 關閉。
在檔案操作上可使用 fgets()、fgetss() 與 fputs()。若是開檔發生錯誤,返回 false 值。

案例代碼:
<?
$fp = popen( "/bin/ls", "r" );
?>  

從 PHP 4 移植到 PHP 5需要注意的事項

從 PHP 4 移植到 PHP 5需要注意的事項

向後不相容的改變

儘管大部分 PHP 4 的代碼應該不用修改就能運行,還是應該留意以下向後不相容的改變:

    *

      有了一些新關鍵字。
    *

      strrpos() 和 strripos() 如今使用整個字串作為 needle。
    *

      非法使用字串偏移量會導致 E_ERROR 而不是 E_WARNING。一個非法使用的例子:$str = 'abc'; unset($str[0]);.
    *

      array_merge() 被改成只接受陣列。若果傳遞入非陣列變量,對每個此類參數都會發出一條 E_WARNING 訊息。要小心因為你的代碼有可能瘋狂發出 E_WARNING。
    *

      PATH_TRANSLATED 伺服器變量在 Apache2 SAPI 中不再暗中設定,這和 PHP 4 中的情形相反,若果 Apache 沒產生此值則其被設為和 SCRIPT_FILENAME 伺服器變量一樣的值。此修改是為了遵守 CGI 規範。更多訊息見 bug #23610,並參考手冊中 $_SERVER['PATH_TRANSLATED'] 的說明。此問題也影響到 PHP >= 4.3.2 的版本。
    *

      Tokenizer 增加不再定義 T_ML_COMMENT 常量。若果把 error_reporting 設為 E_ALL,PHP 將產生一條訊息。儘管 T_ML_COMMENT 從來都沒用到過,還是在 PHP 4 中定義了。在 PHP 4 和 PHP 5 中 // 和 /* */ 都被解析為 T_COMMENT 常量。但是 PHPDoc 風格的注解 /** */,自 PHP 5 開始被 PHP 解析,被識別為 T_DOC_COMMENT。
    *

      若果 variables_order 內含「S」,$_SERVER 應該帶有 argc 和 argv 被產生。若果會員特別配製系統不建立 $_SERVER,那此變量當然就不存在了。改變的地方是不管 variables_order 怎麼設定,在 CLI 版本中 argc 和 argv 總是可用的。本來 CLI 版不是總會產生全局變量 $argc 和 $argv 的。
    *

      沒有屬性的對象不再被當成「empty」。
    *

      有些情況下類必須在使用前被定義。這僅在使用了一些 PHP 5 的新特性的時候發生。其它情況下行為都沒變。
    *

      get_class(),get_parent_class() 和 get_class_methods() 如今返回的類/方法名和定義時的名字一致(區分大小寫),對於依賴以前行為(類/方法名總是返回小寫的)的老腳本可能產生問題。一個可能的解決方法是在腳本中搜尋所有這些函數並使用 strtolower()。

      區分大小寫的改變也適用於魔術常量 __CLASS__,__METHOD__ 和 __FUNCTION__。其值都會嚴格按照定義時的名字返回(區分大小寫)。
    *

      ip2long() 在傳遞入一個非法 IP 作為參數時返回 FALSE,不再是 -1。
    *

      若果在包括檔案中定義有函數,則不管在 return() 之前還是之後都可以在主檔案中呼叫。若果檔案被包括兩次,PHP 5 會發出致命錯誤,因為函數已經被定義,而 PHP 4 不管這個。因此推薦使用 include_once() 而不要去檢查檔案是否已被包括以及在包括檔案中有條件返回。
    *

      include_once() 和 require_once() 在 Windows 下先將路徑規格化,因此包括 A.php 和 a.php 只會把檔案包括一次。

例子 B-1. strrpos() 和 strripos() 如今用整個字串作為 needle
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)

var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>

例子 B-2. 沒有屬性的對象不再被當成「empty」
<?php
class test { }
$t = new test();

var_dump(empty($t)); // echo bool(false)

if ($t) {
    // Will be executed
}
?>

例子 B-3. 有些情況下類必須在使用之前定義
<?php

//works with no errors:
$a = new a();
class a {
}


//throws an error:
$a = new b();

interface c{
}
class b implements c {
}

?>

(PHP程式設計)開發提高效率的技巧

【文章內容】:(PHP程式設計)開發提高效率的技巧

0、用單引號代替雙引號來包括字串,這樣做會更快一些。
因為PHP會在雙引號包圍的字串中搜尋變量,單引號則不會,注意:只有echo能這麼做,它是一種可以把多個字串當作參數的「函數」
(譯註:PHP手冊中說echo是語系結構,不是真正的函數,故把函數加上了雙引號)。

1、如果能將類的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。

2、$row['ID']的速度是$row[id]的7倍。

3、echo 比 print 快,並且使用echo的多重參數(譯註:指用逗號而不是句點)代替字串連線,比如echo $str1,$str2。

4、在執行for迴圈之前確定最大迴圈數,不要每迴圈一次都計算最大值,最好運用foreach代替。

5、註銷那些不用的變量尤其是大陣列,以便釋放記憶體。

6、盡量避免使用__get,__set,__autoload。

7、require_once()代價昂貴。

8、include檔案時盡量使用絕對路徑,因為它避免了PHP去include_path裡尋找檔案的速度,解析操作系統路徑所需的時間會更少。

9、如果你想知道腳本開始執行(譯註:即伺服器端收到用戶端請求)的時刻,使用$_SERVER[『REQUEST_TIME』]要好於time()。

10、函數代替正則表達式完成相同功能。

11、str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。

12、如果一個字串取代函數,可接受陣列或字元作為參數,並且參數長度不太長,那麼可以考慮額外寫一段取代代碼,使得每次傳遞參數是一個字元,而不是只寫一行代碼接受陣列作為查詢和取代的參數。

13、使用選取分支語句(譯註:即switch case)好於使用多個if,else if語句。

14、用@屏蔽錯誤訊息的做法非常低效,極其低效。

15、開啟apache的mod_deflate模組,可以提高網頁的瀏覽速度。

16、資料庫連線當使用完畢時應關掉,不要用長連線。

17、錯誤訊息代價昂貴。

18、在方法中遞增局部變量,速度是最快的。幾乎與在函數中呼叫局部變量的速度相當。

19、遞增一個全局變量要比遞增一個局部變量慢2倍。

20、遞增一個物件屬性(如:$this->prop++)要比遞增一個局部變量慢3倍。

21、遞增一個未預定義的局部變量要比遞增一個預定義的局部變量慢9至10倍。

22、僅定義一個局部變量而沒在函數中呼叫它,同樣會減慢速度(其程度相當於遞增一個局部變量)。PHP大概會檢檢視是否存在全局變量。

23、方法呼叫看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)加入了10個方法,但效能上沒有變化。

24、派生類中的方法運行起來要快於在基類中定義的同樣的方法。

25、呼叫帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變量遞增操作。類似的方法呼叫所花費的時間接近於15次的局部變量遞增操作。

attachments/201307/7238334217.jpg

--------------------------------------------------------------------------------
【文章標題】: (PHP程式設計)開發提高效率的技巧
【文章作者】: PHP程式設計+MySQL資料庫+Dreamweaver整合教學密訓基地
【作者信箱】: ster168ster@gmail.com
【作者首頁】: http://por.tw/php/
【PHP程式設計+MySQL資料庫+Dreamweaver整合教學課程】: http://por.tw/php/new-E_learning/index.php
【基地主機】: http://goto1688.com/php/
【版權聲明】: (原創)PHP程式設計+MySQL資料庫+Dreamweaver整合教學密訓基地,轉載必須保留完整標頭。刪除者依法追究!

--------------------------------------------------------------------------------
26、Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,少用腳本。

27、除非腳本可以快取,否則每次呼叫時都會重新編譯一次。引入一套PHP快取機制通常可以提升25%至100%的效能,以免除編譯開銷。

28、盡量做快取,可使用memcached。memcached是一款高效能的記憶體物件快取系統,可用來加速動態Web應用程式,減輕資料庫負載。對操作碼 (OP code)的快取很有用,使得腳本不必為每個請求做重新編譯。

29、當操作字串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內建資料結構,用於存儲PHP變量)中存儲的已知字串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數呼叫會經由諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、哈希尋找,會跟隨被呼叫的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。

(舉例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(與下面的技巧做比較)
if (!isset($foo{5})) { echo “Foo is too short”$$ }

呼叫isset()恰巧比strlen()快,因為與後者不同的是,isset()作為一種語系結構,意味著它的執行不需要函數尋找和字母小寫化。也就是說,實際上在檢驗字串長度的頂層代碼中你沒有花太多開銷。

34、當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語系,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最改善處理的一種,正如Zend的PHP改善器所作的那樣。牢記這個改善處理不失為一個好主意,因為並不是所有的指令改善器都會做同樣的改善處理,並且存在大量沒有裝配指令改善器的網際網路服務提供商(ISPs)和伺服器。

35、並不是事必面向物件(OOP),面向物件往往開銷很大,每個方法和物件呼叫都會消耗很多記憶體。

36、並非要用類實現所有的資料結構,陣列也很有用。

37、不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?

38、當你需要時,你總能把代碼分解成方法。

39、盡量採用大量的PHP內建函數。

40、如果在代碼中存在大量耗時的函數,你可以考慮用C延伸的模式實現它們。

41、評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug除錯器包括了檢驗程式,評估檢驗總體上可以顯示出代碼的瓶頸。

42、mod_zip可作為Apache模組,用來即時壓縮你的資料,並可讓資料傳輸量降低80%。

43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用file_get_contents,因為他的效率高得多!但是要注意file_get_contents在開啟一個URL檔案時候的PHP版本問題;

44、盡量的少進行檔案操作,雖然PHP的檔案操作效率也不低的;

45、改善Select SQL語句,在可能的情況下盡量少的進行Insert、Update操作(在update上,我被惡批過);

46、盡可能的使用PHP內定函數(但是我卻為了找個PHP裡面不存在的函數,浪費了本可以寫出一個自訂函數的時間,經驗問題啊!);

47、迴圈內定不要聲明變量,尤其是大變量:物件(這好像不只是PHP裡面要注意的問題吧?);

48、多維陣列盡量不要迴圈嵌套賦值;

49、在可以用PHP內定字串操作函數的情況下,不要用正則表達式;

50、foreach效率更高,盡量用foreach代替while和for迴圈;

51、用單引號替代雙引號引用字串;

52、「用i+=1代替i=i+1。符合c/c++的習慣,效率還高」;

53、對global變量,應該用完就unset()掉;

--------------------------------------------------------------------------------
你在摸索如何PHP程式設計+MySQL資料庫+Dreamweaver整合建構網站嗎?
有【技術顧問服務】可諮詢嗎?
當問題無法解決你要發很多時間處理(或許永遠找出答案)
那是自己摸索 PHP+MySQL+Dreamweaver整合痛苦開始!
購買【PHP程式設計+MySQL資料庫+Dreamweaver整合】DVD課程
就可獲得【PHP+MySQL+Dreamweaver】技術【顧問諮詢服務】!

 

如何用PHP網頁,取得目前Linux主機PHP版本?(phpversion)

如果你是租用虛擬主機,如何知道Linux主機PHP版本呢?
----------------------------------------------------------
方法如下:
先用網頁編輯軟體
例如:Dreamweaver 新增一個新的PHP動態空白網頁
切到程式碼
刪除全部字串,再貼入下面語法,存檔並上傳至主機網站下
在瀏覽器網址列輸入該PHP路徑,開啟該網頁
即可以看到該Linux主機PHP版本!

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

<?php

// prints e.g. 'Current PHP version: 3.0rel-dev'

echo "Current PHP version: ".phpversion();

?>

-----------------------------------------------------------
語法 : string phpversion (void)

說明 :

傳回現在所安裝的PHP的版本。

-----------------------------------------------------------
參考 : phpinfo( ) phpcredits( ) php_logo_guid( )

透視 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;
網站發生警語:atal error: Allowed memory size of 16777216 bytes exhausted(記憶體不夠用)之處理方法

網站架站或網站升級後,網站發生類似警語:atal error: Allowed memory size of XXXXXXXX bytes exhausted
不管是管理介面(Dashboard),或者登入出問題,看來幾乎都是記憶體不夠用。


例如其發生的警語:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4023 bytes)

這是什麼意思呢?又該如何解決?
答案是:記憶體的需求是更大了,這邊提供幾個解決的方法。

當出現以下的類似情況,要來調整PHP的記憶體,來執行更多的程式
1.找到php.ini的路徑(/etc/php5/apache2/php.ini)
2.搜尋:memory_limit 字串
3.找到:memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)

A.如果有權限修改php.ini,那麼請將memory_limit = 32M的32提高,看是要64還是96或者128。
    
B.如果沒有權限修改php.ini,可以在.htaccess裡面加上php_value memory_limit 32M,或者更高的數字。

備註:php.ini修改後apache要重新啟動才會生效!

語法如下:
service apache2 restart


-------------------------------------------------------------
【文章標題】:(PHP程式設計) EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版
【文章作者】: PHP-MySQL-程式設計教學密訓基地-總教頭
【作者信箱】: ster168ster@gmail.com
【作者首頁】: http://por.tw/php
【最新教學課程】: http://por.tw/php/new-E_learning/index.php
【基地首頁】: http://por.tw
【版權聲明】: 【原創】PHP-MySQL-程式設計教學密訓基地,轉載必須保留完整標頭。刪除者依法追究!
--------------------------------------------------------------------------------
【文章內容】
  (PHP程式設計) EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版
 
  EclipsePHP Studio 1.2.2 (以下簡稱:EPP 1.2.2)是一個大型PHP項目開發編譯器,給予Eclipse底層開發而來,並且整合了JDK,免除處了安裝配置的麻煩,一次安裝即可使用無需配置。
此編譯器為PHP編譯器,輔助PHP代碼的開發和除錯,整合了代碼高亮,函數追蹤,時時糾錯等功能。
同時還增加了合作開發版本伺服器功能: SVN , CVS 。 內嵌瀏覽器可以在除錯簡單代碼時時瀏覽。
不僅支援php ,也支援其他網路語系像html、xhtml、xml、css和javascript、java、perl、python等!

attachments/201009/8984073170.png
 
(PHP程式設計)EclipsePHP Studio 1.2.2 特點:
1、方便PHP面向物件開發,有類整合追蹤功能。
2、代碼時時糾錯,讓語法錯誤扼殺在搖籃中。
3、內嵌瀏覽器除錯更加方便快捷。
4、整合了常用的版本伺服器用戶端功能 SVN CVS。
5、豐富的快捷鍵讓開發提高效率。
6、函數,變量,快捷提示,讓開發變的簡單輕鬆。
7、強調的除錯和結構操作,使得更容易開發大型的項目
8、多項目管理,可以用開發者在多個項目之間切換。
9、很好的延伸功能,可以安裝多種外掛程式。
 
(PHP程式設計)EclipsePHP Studio 1.2.2更新:
1、修正編寫PHP代碼時行號不能標準顯示每次開啟丟失問題
2、增加了在EPP中直接開啟檔案目錄方便操作。
3、解決了在Vista 、Windows7 中假死的問題。
4、重新修正了PHP支援內核反應速度更快
5、去除了一些不必要的說明檔案編輯器在增加功能的基礎上較少體積。
 
  備註:本軟體是大陸內地軟體,安裝時是簡體畫面,安裝後可以正常顯示繁體中文。
 
 
  (PHP程式設計)EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版下載網址:
 
  http://por.tw/Downloads/EclipsePHP.Studio-1.2.2.rar
 
--------------------------------------------------------------------------------
你還在自己摸索PHP-MySQL-網頁與網站程式設計嗎?你有【技術顧問服務】可以諮詢嗎?
問題無法解決你要發很多時間處理(或許永遠找出答案)那是自己摸索程式設計的痛苦!
購買【PHP+MySQL程式設計】課程錄影DVD教學課程,你就可獲得技術【顧問諮詢服務】!

簡單的使用PHP程式(日曆算法)

您知道在使用PHP程式中,日曆算法是如何達成的嗎?

/**
  * 日曆
  *
  */
 if (function_exists('date_default_timezone_set')) {
     date_default_timezone_set('Asia/Chongqing');
 }
 $date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
 $date = getdate(strtotime($date));
 $end = getdate(mktime(0, 0, 0, $date['mon'] + 1, 1, $date['year']) - 1);
 $start = getdate(mktime(0, 0, 0, $date['mon'], 1, $date['year']));
 $pre = date('Y-m-d', $start[0] - 1);
 $next = date('Y-m-d', $end[0] + 86400);
 $html = '<table border="1">';
 $html .= '<tr>';
 $html .= '<td><a href="' . $PHP_SELF . '?date=' . $pre . '">-</a></td>';
 $html .= '<td colspan="5">' . $date['year'] . ';' . $date['month'] . '</td>';
 $html .= '<td><a href="' . $PHP_SELF . '?date=' . $next . '">+</a></td>';
 $html .= '</tr>';
 $arr_tpl = array(0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '');
 $date_arr = array();
 $j = 0;
 for ($i = 0; $i < $end['mday']; $i++) {
     if (!isset($date_arr[$j])) {
         $date_arr[$j] = $arr_tpl;
     }
     $date_arr[$j][($i+$start['wday'])%7] = $i+1;
     if ($date_arr[$j][6]) {
         $j++;
     }
 }
 foreach ($date_arr as $value) {
     $html .= '<tr>';
     foreach ($value as $v) {
         if ($v) {
             if ($v == $date['mday']) {
                 $html .= '<td><b>' . $v . '</b></td>';
             } else {
                 $html .= '<td>' . $v . '</td>';
             }
         } else {
             $html .= '<td>&nbsp;</td>';
         }
     }
     $html .= '</tr>';
 }
 $html .= '</table>';
 echo $html;  

隱藏apache和php的版本訊息可以盡量減少敏感訊息洩露的方法,並不會使你的伺服器真的更安全,如果你現在使用的版本比較舊,請務必盡快將系統升級,降低被蠕蟲攻擊的風險。

隱藏apache和php的版本訊息,web server避免一些不必要的麻煩,可以把apache和php的版本訊息不顯示


隱藏 Apache 版本訊息

/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf

ServerTokens ProductOnly
ServerSignature Off

重啟 apache
現在 http 頭裡面只看到:
Server: Apache

隱藏 PHP 版本
php.ini

expose_php On
改成
expose_php Off

重啟apache後,php版本在http頭中隱藏了。

詳解 :

為了防止某些別有用心的傢伙窺視我們的伺服器,應該做些什麼.
我們來看一下關聯的2個參數,分別為ServerTokens和ServerSignature,通過控制這2個閥門應該就能起到一些作用,比如我們可以在配置檔案中這麼寫:
ServerTokens Prod
ServerSignature Off

ServerTokens
用於控制伺服器是否相應來自使用者端的請求,向使用者端輸出伺服器系統類型或內建模組等重要的系統訊息。 在主配置檔案中提供全局控制預設閥值為"Full"(ServerTokens Full),所以,如果你的Linux發行版本沒有變更過這個閥值的話,所有與你的系統有關的敏感訊息都會向全世界公開。比如RHEL會將該 閥值變更為"ServerTokens OS",而Debian依然使用預設的"Full"閥值
以apache-2.0.55為例,閥值可以設定為以下某項(後面為相對應的Banner Header):
Prod >>> Server: Apache
Major >>> Server: Apache/2
Minor >>> Server: Apache/2.0
Minimal >>> Server: Apache/2.0.55
OS >>> Server: Apache/2.0.55 (Debian)
Full (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

ServerSignature
控制由系統生成的頁面(錯誤訊息,mod_proxy ftp directory listing等等)的頁腳中如何顯示訊息。

可在全局設定檔案中控制,或是通過.htaccess檔案控制
預設為"off"(ServerSignature Off),有些Linux發行版本可能會開啟這個閥門,比如Debian在預設的虛擬主電腦上預設將這個閥門設定為開放
全局閥門的閥值會被虛擬主電腦或目錄單位的配置檔案中的閥值所覆蓋,所以,必須確保這樣的事情不應該發生
可用的閥值為下面所示:
Off (default): 不輸出任何頁腳訊息 (如同Apache1.2以及更舊版本,用於迷惑)
On:輸出一行關於版本號以及處於運行中的虛擬主電腦的ServerName (2.0.44之後的版本,由ServerTokens負責是否輸出版本號)
EMail: 建立一個傳輸到給ServerAdmin的"mailto"

注意:上述關於如何設定2個閥門從而盡量減少敏感訊息洩露的方法,並不會使你的伺服器真的更安全,如果你現在使用的版本比較舊,請務必盡快將系統升級,降低被蠕蟲攻擊的風險。

您還在自己(死背PHP與MySQL語法)嗎?別傻了!最快速的生成軟體來了!
有些人,在學校學的是:資訊科系(您要花3-4年才能畢業),畢業後...上班第一天就被:革職了!
為何社會如此嚴苛?老闆為何不給您年輕人機會?
不是老闆嚴苛,而是學校誤人子弟!
目前大專院校(死背PHP與MySQL語法),學了3-4年才能畢業(就然學一些過時的技術)
傳統設計pHP程式網站(人工輸入PHP與MySQL語法),一個專案要搞好幾個星期(有時還搞不定)?
相同的PHP網站專案,別人用『PHPMake』一天搞定!
請問:老闆要一個專案要搞好幾個星期(有時還搞不定)的員工嗎?
請認清事實:不是社會無情!一切都要講求成本與效率!
公司不是慈善機構,花薪水聘任員工,當然要聘用:最好.最強.最有效率的員工!

PHPMaker是一個強大的自動化工具,可以從MySQL,PostgreSQL,Microsoft Access和Microsoft SQL Server資料庫快速生成一整套PHP。
使用PHPMaker,您可以立即建立網站,容許使用者在網路上檢視,編輯,搜尋,加入和刪除記錄。


 

PHPMaker設計用於高彈性,眾多選項使您能夠生成最適合您需求的PHP應用程式。生成的代碼是乾淨,易於理解和易於定制的。

PHP腳本可以在Windows伺服器(MySQL / PostgreSQL / Access / MSSQL)或Linux / Unix伺服器(MySQL / PostgreSQL)上運行。
PHPMaker可以節省大量的時間,適合初學者和經驗豐富的開發人員。

這裡有『總教頭』的中文教學課程:

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

以下是“PHPMaker”的一些主要功能:
- 所有腳本都正確連結
- 可選清單,為每個表/檢視加入/複製,檢視,編輯,刪除,多重更新和搜尋頁面。 (見表格設定)可訂做的表格顯示順序。
- 清單頁面中可選的網格加入,網格編輯,內聯加入,內聯複製,內聯刪除,內聯編輯
- 插入或更新記錄之前的可選確認頁面
- 清單/檢視頁面中的尋呼機
- 每個欄位的完全可定制的檢視和編輯格式。 (請參閱現場設定)可定制的欄位顯示順序。
- 伺服器端驗證和/或用戶端JavaScript驗證
- 可選搜尋功能(快速,延伸快速和進階)與搜尋結果突出顯示
- 可選的使用者ID和使用者層級進階安全性,以保護資料免遭未經授權的訪問。 (請參閱安全設定)支援動態使用者層級和分級父級使用者ID。
- 完成使用者註冊系統,可選使用者啟動
- 可選的HTML設定。字集,字型,CSS,可訂做的主題與預覽。 (見HTML設定)
- 選單編輯器
- 多個主/詳細頁面
- 各種PHP選項。字集,區功能變數設定,預設日期格式等。 (見PHP設定)
- 從項目檔案中儲存和恢復項目
- 將項目設定與資料庫中的變更同步。
- 自動在IIS中建立虛擬目錄
- CSS樣式表整合
- 欄位聚合(總和,平均和計數)
- 內建視覺查詢構建器的訂做檢視
- 基本報告
- 從清單/檢視頁面匯出到列印友好/ HTML / Word / Excel / CSV / XML

- 多列排序
- 使用者可選的頁面大小
- 表特定清單頁面選項
- 檔案上傳到資料夾和資料庫
- 動態表加載
- 複合鍵
- 突出顯示並選取行彩色
- 自動建議文字方塊
- 自動填充在選取尋找欄位的值時填充關聯的欄位值
- 動態加入選取清單選項
- 具有多種選取支援的動態選取清單(SELECT,RADIO和CHECKBOX)
- 自動登入和自動重定向
- 多頁面加入/編輯/檢視頁面作為頁面標題的標籤頁
- 審計追蹤
- 加入/編輯/刪除的電子信件知會
- 可選CAPTCHA系統
- 檔案上傳到資料夾和資料庫
- 動態表加載
- 伺服器事件和用戶端腳本
- 代碼庫
- MD5和區分大小寫的密碼
- 完全可定制的模板和延伸

PHPMaker is a powerful automation tool that can generate a full set of PHP quickly from MySQL, PostgreSQL, Microsoft Access and Microsoft SQL Server databases. Using PHPMaker, you can instantly create web sites that allow users to view, edit, search, add and delete records on the web.

PHPMaker is designed for high flexibility, numerous options enable you to generate PHP applications that best suits your needs.The generated codes are clean, easy to understand and easily customizable.

The PHP scripts can be run on Windows servers (MySQL/PostgreSQL/Access/MSSQL) or Linux/Unix servers (MySQL/PostgreSQL). PHPMaker can save you tons of time and is suitable for both beginners and experienced develpers alike.

Here are some key features of "PHPMaker":
- All scripts linked up properly
- Optional list, add/copy, view, edit, delete, multi-update and search pages for each table/view. (See Table Setup) Customizable table display order.
- Optional Grid-Add, Grid-Edit, Inline-Add, Inline-Copy, Inline-Delete, Inline-Edit right in the List page
- Optional confirmation page before insering or updating record
- Pagers in List/View page
- Fully customizable View and Edit format for each field. (See Field Setup) Customizable field display order.
- Server-side validation and/or client-side JavaScript validation
- Optional search features (Quick, Extended Quick and Advanced) with search result highlight
- Optional User ID and User Level Advanced Security to protect data from unauthorized access. (See Security Settings) Supports Dynamic User Levels and Hierarchical Parent User ID.
- Complete user registration system with optional user activation
- Optional HTML settings. charset, font, CSS, customizable themes with preview. (See HTML Settings)
- Menu Editor
- Multiple Master/Detail pages
- Various PHP options. Charset, locale, default date formats, etc . (See PHP Settings)
- Saving and restoring project from Project File
- Synchronize project settings with changes in database.
- Creates virtual directory in IIS automatically
- CSS stylesheet integration
- Field aggregation (sum, average and count)
- Custom View with built-in visual query builder
- Basic reporting
- Export to Printer-friendly/HTML/Word/Excel/CSV/XML from List/View page
- Multi-column sorting
- User selectable page size
- Table-specific List page options
- File uploading to folder and database
- Dynamic table loading
- Composite key
- Highlight and select row color
- Auto-Suggest textbox
- Auto-Fill for filling related field values on selecting a value for a lookup field
- Adding option to Selection List dynamically
- Dynamic Selection List with multiple selection support (SELECT, RADIO and CHECKBOX)
- Auto-login and Auto-Redirect
- Multi-page add/edit/view pages as tabs with page captions
- Audit Trail
- Email Notification on Add/Edit/Delete
- Optional CAPTCHA system
- File uploading to folder and database
- Dynamic table loading
- Server events and client scripts
- Code repository
- MD5 and case-sensitive password
- Fully customizable template and extensions

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