【PHP程式設計+MySQL資料庫+PHPMaker整合教學+技術諮詢】 本月特價優惠中! 動態的架站程式時代,要自訂PHP程式頁面有那麼難嗎? MySQL『資料庫』與『資料表』,用PHP程式有那麼難控制嗎? 你不用死背『PHP程式』與『MySQL資料庫』語法也能獨自設計完成! 這是自動化軟體程式的年代 (用PHPMaker 設計在彈指之間就能自動生成整個 PHP 程式系統) 這不是:神話!程式軟體模組取代了這一切複雜的工程。 你可以自己建構自己專屬的: 訂購表單、會員名單、擴增購物車特殊頁面 →POS 系統、CRM 系統、ERP 系統、HRM 系統...等等 (更可以加入數據資源銷售賺錢!) 該是:【見證奇蹟】的時候了! 非親眼所見....真的無法相信此神兵利器!

PHP-MySQL-程式設計

MySQL的資料精靈-SQL Maestro Group Data Wizard For MySQL 12.6.0.1

針對MySQL的資料精靈是一個功能強大的Windows圖形使用者介面管理你的MySQL資料的效用。
它提供了一個易於使用的工具,輕鬆快速地執行所需的資料處理的數量。

主要特點:
– 資料泵:任何架構和資料轉移到MySQL
– 多達18檔案格式的資料匯出
– 從Excel中,CSV,文字檔案和資料匯入
– ASP.NET發電機:建立ASP.NET腳本的全套
– 靈活的任務調度
– 在背景模式下執行任務的代理申請
– 強大的指令行介面



Data Wizard for MySQL is a powerful Windows GUI utility for managing your MySQL data.
It provides you with a number of easy-to-use tools for performing the required data manipulation easily and quickly.

Key features:
– Data Pump: transfer any schema and data to MySQL
– Data export to as many as 18 file formats
– Data import from Excel, CSV, text files and more
– ASP.NET Generator: create full set of ASP.NET scripts
– Flexible Task Scheduler
– The Agent application to execute tasks in background mode
– Powerful command-line interface

官方網站:  http://www.sqlmaestro.com

SQL.Maestro.Group.Data.Wizard.For.MySQL.v12.6.0.1

[PHP] include_once 與 require_once(包含其它的檔案進來)

include_once 與 require_once都是PHP的函式,主要是要包含其它的檔案進來,而且萬一該檔案被包含過了,則不會重新再包含一次。

而基於PHP不可能開發同一個函式的情況下,去試了一下他的不同之處,在於include_once萬一遇到錯誤,則會持續執行。
但require_once則會停止執行,並產生Fatal Errors。

以程式碼說明如下:

檔名:test.php

<?php
 require_once("a.php");
 require_once("c.php");
 echo dirname(__FILE__)." in test.php ";
?>

檔名:a.php

<?php
 echo dirname(__FILE__)." in a.php"."</br>";
 require_once("b.php");
?>

檔名:b.php

<?php
 echo dirname(__FILE__)." in b.php"."</br>";
?>

則會出現下列結果:
C:AppServwwwPTS in a test.php
C:AppServwwwPTS in b test.php

Warning: require_once(c.php) [function.require-once]: failed to open stream: No such file or directory in C:AppServwwwPTS est.php on line 3

Fatal error: require_once() [function.require]: Failed opening required 'c.php' (include_path='.;C:php5pear') in C:AppServwwwPTS est.php on line 3
但若是改成include_once,則會變成
C:AppServwwwPTS in a test.php
C:AppServwwwPTS in b test.php

Warning: require_once(c.php) [function.require-once]: failed to open stream: No such file or directory in C:AppServwwwPTS est.php on line 3

Warning: include_once() [function.include]: Failed opening 'c.php' for inclusion (include_path='.;C:php5pear') in C:AppServwwwPTS est.php on line 3
C:AppServwwwPTS in test.php
由此應該可以很輕易地看出兩者的不同了!

由MySQL用來存儲資料的檔案格式以已經被廣泛地測試過,但是總是有外部情況可以導致資料庫表被破壞:

mysqld進程在一個寫入當中被殺死;電腦的意外關閉(例如,如果電腦掉電);一個硬體錯誤。

這章描述如何檢查和處理在MySQL資料庫中的資料損壞。如果你的表損壞很多,你應該嘗試找出其原因!見G.1 調試一個MySQL伺服器。

在執行崩潰恢復時,理解在一個資料庫中的每一個表tbl_name對應的在資料庫目錄中的3個檔是很重要的:

檔 用途

“tbl_name.frm” 表定義(表格)檔
“tbl_name.MYD” 資料檔案
“tbl_name.MYI” 索引檔

這3個檔的每一個檔案類型可能遭受不同形式的損壞,但是問題最常發生在資料檔案和索引檔。

myisamchk通過一行一行地創建一個“.MYD”(資料 )檔的副本來工作,它通過由刪除老的“.MYD 檔並且重命名新檔到原來的檔案名結束修復階段。如果你使用–quick,myisamchk不創建一個臨時“.MYD”檔,只是假定“.MYD”檔是正確的並且僅創建一個新的索引檔,不接觸“.MYD”檔,這是安全的,因為myisamchk自動檢測“.MYD”檔是否損壞並且在這種情況下,放棄修復。你也可以給myisamchk兩個–quick選項。在這種情況下,myisamchk不會在一些錯誤上(象重複按鍵)放棄,相反試圖通過修改“.MYD”檔解決它們。通常,只有在你在太少的空閒磁碟空間上實施一個正常修復,使用兩個–quick選項才有用。在這種情況下,你應該至少在運行myisamchk前做一個備份。

一、怎樣檢查表的錯誤

為了檢查一張表,使用下列命令:

myisamchk tbl_name

這能找出所有錯誤的99.99%。它不能找出的是僅僅涉及資料檔案的損壞(這很不常見)。如果你想要檢查一張表,你通常應該沒有選項地運行myisamchk或用-s或–silent選項的任何一個。

myisamchk -e tbl_name

它做一個完全徹底的資料檢查(-e意思是“擴展檢查”)。它對每一行做每個鍵的讀檢查以證實他們確實指向正確的行。這在一個有很多鍵的大表上可能花很長時間。myisamchk通常將在它發現第一個錯誤以後停止。如果你想要獲得更多的資訊,你能增加–verbose(-v)選項。這使得myisamchk繼續一直到最多20個錯誤。在一般使用中,一個簡單的myisamchk(沒有除表名以外的參數)就足夠了。

myisamchk -e -i tbl_name

象前面的命令一樣,但是-i選項告訴myisamchk還列印出一些統計資訊。

二、怎樣修復表

一張損壞的表的症狀通常是查詢意外中斷並且你能看到例如這些錯誤:

“tbl_name.frm”被鎖定不能改變。

不能找到檔“tbl_name.MYI”(Errcode :### )。

從表處理器的得到錯誤###(此時,錯誤135是一個例外)。

意外的檔結束。

記錄檔被毀壞。

在這些情況下,你必須修復表。myisamchk通常能檢測並且修復出錯的大部分東西。

修復過程包含最多4個階段,在下麵描述。在你開始前,你應該cd到資料庫目錄和檢查表檔的許可權,確保他們可被運行mysqld的Unix使用者讀取(和你,因為你需要存取你正在檢查的檔)。如果它拒絕你修改檔,他們也必須是可被你寫入的。

階段1:檢查你的表

運行

myisamchk *.MYI

或(myisamchk -e *.MYI,如果你有更多的時間)。使用-s(沉默)選項禁止不必要的資訊。

你必須只修復那些myisamchk報告有一個錯誤的表。對這樣的表,繼續到階段2。

如果在檢查時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。

階段2 :簡單安全的修復

首先,試試myisamchk -r -q tbl_name(-r -q意味著“快速復原模式”)。這將試圖不接觸資料檔案來修復索引檔。如果資料檔案包含它應有的一切和在資料檔案指向正確地點的刪除連接,這應該管用並且表可被修復。開始修理下一張表。否則,使用下列過程:

在繼續前做資料檔案的一個備份。

使用myisamchk -r tbl_name(-r意味著“復原模式”)。這將從資料檔案中刪除不正確的記錄和已被刪除的記錄並重建索引檔。

如果前面的步驟失敗,使用myisamchk –safe-recover tbl_name。安全復原模式使用一個老的恢復方法,處理常規復原模式不行的少數情況(但是更慢)。

如果在修復時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。

階段3 :困難的修理

如果在索引檔的第一個16K塊被破壞,或包含不正確的資訊,或如果索引檔丟失,你只應該到這個階段 。在這種情況下,創建一個新的索引檔是必要的。按如下這樣做:

把資料檔案移更安全的地方。

使用表描述檔創建新的(空)資料和索引檔:

shell> mysql db_name
mysql> DELETE FROM tbl_name;
mysql> quit

將老的資料檔案拷貝到新創建的資料檔案之中。(不要只是將老檔移回新檔之中;你要保留一個副本以防某些東西出錯。)

回到階段2。現在myisamchk -r -q應該工作了。(這不應該是一個無限迴圈)。

階段4:非常困難的修復

只有描述檔也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被創建以後,描述檔就不再改變了。

從一個備份恢復描述檔並且回到階段3。你也可以恢復索引檔並且回到階段2。對後者,你應該用myisamchk -r啟動。

如果你沒有一個備份但是確切地知道表是怎樣被創建的,在另一個資料庫中創建表的一個拷貝。刪除新的資料檔案,然後從其他資料庫將描述和索引檔移到破壞的資料庫中。這給了你新的描述和索引檔,但是讓資料檔案獨自留下來了。回到階段2並且嘗試重建索引檔。

三、表優化

為了組合成碎片的記錄並且消除由於刪除或更新記錄而浪費的空間, 以復原模式運行myisamchk:

shell> myisamchk -r tbl_name

你可以用SQL的OPTIMIZE TABLE語句使用的相同方式來優化一張表,OPTIMIZE TABLE比較容易,但是myisamchk更快。也沒有在一個實用程式和伺服器之間不必要的交互可能性,因為當你使用OPTIMIZE TABLE時,伺服器做所有的工作。

myisamchk也有你可用來改進一個表的性能的很多其他選項:

-S, –sort-index
-R index_num, –sort-records=index_num
-a, –analyze

對於選項完整的描述見myisamchk調用語法。

FROM:http://www.weste.net/2006/10-26/09563664541.html

[MySQL改善] — 如何使用SQL Profiler 效能分析器

mysql 的 sql 效能分析器主要用途是顯示 sql 執行的整個過程中各項資源的使用情況。分析器可以更好的展示出不良 SQL 的效能問題所在。
下面我們舉例介紹一下 MySQL SQL Profiler 的使用方法:

    * 首先,開啟 MySQL SQL Profiler

mysql> SELECT @@profiling;
+————-+
| @@profiling |
+————-+
| 0 |
+————-+
1 row in set (0.00 sec)
mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@profiling;
+————-+
| @@profiling |
+————-+
| 1 |
+————-+
1 row in set (0.00 sec)
預設情況下 profiling 的值為 0 表示 MySQL SQL Profiler 處於 OFF 狀態,開啟 SQL 效能分析器後 profiling 的值為 1.

    * 通過 sql 效能分析器,我們來對照一下 下列語句前後 2 次執行過程的差異,對我們瞭解 sql 的詳細執行過程是非常有說明的。

mysql> create table t_engines select * from t_engines1;
Query OK, 57344 rows affected (0.10 sec)
Records: 57344 Duplicates: 0 Warnings: 0
mysql> select count(*) from t_engines;
+———-+
| count(*) |
+———-+
| 57344 |
+———-+
1 row in set (0.00 sec)
mysql> select count(*) from t_engines;
+———-+
| count(*) |
+———-+
| 57344 |
+———-+
1 row in set (0.00 sec)
mysql> SHOW PROFILES;
+———-+————+————————————————-+
| Query_ID | Duration | Query |
+———-+————+————————————————-+
| 26 | 0.10213775 | create table t_engines select * from t_engines1 |
| 27 | 0.00032775 | select count(*) from t_engines |
| 28 | 0.00003850 | select count(*) from t_engines |
+———-+————+————————————————-+
15 rows in set (0.01 sec)
mysql> SHOW PROFILE FOR QUERY 27;
+——————————–+————+
| Status | Duration |
+——————————–+————+
| (initialization) | 0.00000425 |
| checking query cache for query | 0.00004050 |
| checking permissions | 0.00001050 |
| Opening tables | 0.00018250 |
| System lock | 0.00000450 |
| Table lock | 0.00001775 |
| init | 0.00001075 |
| optimizing | 0.00000550 |
| executing | 0.00002775 |
| end | 0.00000450 |
| query end | 0.00000325 |
| storing result in query cache | 0.00000400 |
| freeing items | 0.00000400 |
| closing tables | 0.00000500 |
| logging slow query | 0.00000300 |
+——————————–+————+
15 rows in set (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 28;
+————————————-+————+
| Status | Duration |
+————————————-+————+
| (initialization) | 0.00000350 |
| checking query cache for query | 0.00000750 |
| checking privileges on cached query | 0.00000500 |
| checking permissions | 0.00000525 |
| sending cached result to client | 0.00001275 |
| logging slow query | 0.00000450 |
+————————————-+————+
6 rows in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ;
+———-+
| DURATION |
+———-+
| 0.000326 |
+———-+
1 row in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ;
+———-+
| DURATION |
+———-+
| 0.000039 |
+———-+
1 row in set (0.00 sec)
mysql>
從上面的例子中我們可以清晰的看出 2 次執行 count 語句的差別, SHOW PROFILE FOR QUERY 27 展現的是第一次 count 統計的執行過程,包括了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FOR QUERY 28 展示了第二次 count 統計的執行過程 , 第二次 count 直接從查詢快取中返回 count 統計結果,通過對照 2 次統計的總執行時間發現,快取讀的速度接近物理讀的 10 倍。通過使用 SQL 效能分析器可以說明我們對一些比較難以確定效能問題的 SQL 進行診斷,找出問題根源。

Navicat Premium Enterprise 11.0.18 (資料庫管理工具)

Navicat Premium(資料庫管理工具) 是一個可多重連線的資料庫管理工具
Navicat 的功能足以符合專業開發人員的所有需求,但是對資料庫伺服器的新手來說又相當容易學習。
它可讓你以單一程式同時連線到目前世面上所有版本的主流資料庫並進行管理和操作,支援的資料庫有:
MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL。
讓管理不同類型的資料庫更加方便。
支援Microsoft Windows XP SP2, Vista, Windows 7, Windows 8, Server 2003, Server 2008, Server 2012操作系統!

Navicat Premium 使你能簡單並快速地在各種資料庫系統間傳輸資料,或傳輸一份指定 SQL 格式及編碼的純文字檔案。
不同資料庫的批處理作業可以計劃並在特殊的時間運行。
其他功能內含匯入精靈、匯出精靈、查詢建立工具、報表建立工具、資料同步、備份、工作計劃及更多。

Navicat Premium 結合了其他 Navicat 成員的功能。
有了不同資料庫類型的連線能力,Navicat Premium 支援在 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 之間傳輸資料。
它支援大部份 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 的功能,內含存儲過程,事件,觸發器,函數,檢視等。

Navicat Premium 適用於三種平台 – Microsoft Windows、Mac OS X 及 Linux。它可以讓使用者連線本機或遠端伺服器、提供一些實用的資料庫工具如資料模型工具、資料同步、結構同步、匯入、匯出、備份、復原及報表以協助管理資料。

選取 Navicat 的十大理由:
Navicat 已被下載過超過 250 萬次,累積滿意客戶超過 100,000 個,遍佈 138 個國家。
看罷以下十個理由,你將不得不把 Navicat 作為你的資料庫管理工具!

1、屢獲殊榮.:在過去多年,Navicat 屢獲殊榮,產品的優越效能在多個業界獎項中深得專業人士認同,被 CNET Download.com 的編輯評選為第一名、成為 Developer.com 2007 年度產品系列的決賽入圍產品、被 MacUser 評鑑為 4-rabbit、Red Herring 亞洲科技百強 得獎者、亞太區資訊及通信科技大獎的候選者,以及於香港資訊及通信科技獎中取得全年大獎的殊榮。

2、廣被各大知名企業使用:Navicat 強大而且可靠,深得許多企業信賴,內含《財富》世界 500 強的公司。其中一些專門的客戶,有蘋果公司、雅虎公司、聯邦快遞、惠普等等。

3、使用者介面簡單易用:Navicat 設計簡單,易於使用,不管你是一個資料庫開發人員或是一個新手,你會發現 Navicat非常容易使用。

4、豐富的功能:NNavicat 提供了豐富的功能,使你的資料庫管理更輕鬆更快捷。除了一般的資料庫管理功能,如編輯或設計表、資料寫入、SQL 轉儲,和建立或編輯使用者,其他有用的功能內含:匯入/匯出精靈、報表建立工具、資料模型、查詢建立工具、自動完成代碼、資料/結構同步,批處理作業計劃,HTTP/SSH 通道連線、備份以及更多。

5、支援 SSH 通道/HTTP 連線:Navicat 支援通過 SSH 通道和 HTTP 通道連線到你的資料庫。SSH 能防止安全漏洞,並容許你訪問遠端伺服器而不受安全性影響。

6、支援最全面的檔案類型的匯入/匯出:Navicat 支援最全面的資料格式遷移。Navicat 的匯入精靈容許資料從多達 11 種資料格式匯入到資料庫,同時 Navicat 的匯出精靈支援資料匯出到 11 種資料格式,內含 MS Access、MS Excel、XML、HTML、TXT、CVS 及更多。

7、功能不斷更新:十多年來,我們的客戶群已超過 100,000 個使用者,內含許多大型企業、政府機構、大學和個人開發人員,你可以放心,我們將持續地提供客戶支援,創新和令人振奮的新功能。我們的開發團隊有良好的組織,確保我們的產品支援資料庫的創新科技。

8、價格相宜:Navicat 提供一個公平的定價模式。為不同的預算和項目的要求,提供了大量許可證和區功能變數許可證的折扣優惠。對於非商業組織,我們更會給予一個特別價格。為了讓 Navicat 保持為最具成本效益的工具,一旦成為我們的客戶,我們會為客戶提供免費和無限量的電子信件支援,更可享有免費升級至次要版本。

9、專責的客戶支援團隊:我們的客戶支援團隊是由擁有多年經驗的專業人員組成,我們盡一切努力,務求處理所有客戶疑難,致力提供超乎客戶所期望的支援服務。

10、我們更致力聆聽和化解所有客戶的問題,並會迅速提供解決專案。

Navicat Premium Enterprise 11.0.18 (資料庫管理工具) | Home Page: www.navicat.com

 Navicat Premium Enterprise 11.0.18 (資料庫管理工具) | Size: 27 MB / 30 MB

MySQL資料庫的安全防護(資料庫安全技術)

資料庫是網站所有資料寫入的存放之處
萬一資料庫被駭客攻擊或盜取資料,那後果會非常嚴重!
所以使用資料庫,安全問題不能不注意。(不止MySQL資料庫,其他資料庫也一樣更該注意)

以下是mysql應該注意的安全防護事項:

1.如果用戶端和伺服器端的連線需要跨越並通過不可信任的網路,那麼就需要使用ssh隧道來加密該連線的通信。

2.用set password語句來修改使用者的密碼,三個步驟,先「mysql -u root」登陸資料庫系統,然後「mysql> update mysql.user set password=password('newpwd')」,最後執行「flush privileges」就可以了。

3.需要提防的攻擊有,防偷聽、篡改、重播、拒絕服務等,不涉及可用性和容錯方面。對所有的連線、查詢、其他操作使用基於acl即訪問控制清單的安全措施來完成。也有一些對ssl連線的支援。

4.除了root使用者外的其他任何使用者不容許訪問mysql主資料庫中的user表;

加密後存放在user表中的加密後的使用者密碼一旦洩露,其他人可以隨意用該使用者名/密碼相應的資料庫;

5.用grant和revoke語句來進行使用者訪問控制的工作;

6.不使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設定密碼;

7.不選用字典中的字來做密碼;

8.採用防火牆來去掉50%的外部危險,讓資料庫系統躲在防火牆後面工作,或放置在dmz區功能變數中;

9.從網際網路上用nmap來掃瞄3306連接埠,也可用telnet server_host 3306的方法測試,不能容許從非信任網路中訪問資料庫伺服器的3306號tcp連接埠,因此需要在防火牆或路由器上做設定;

10.為了防止被惡意傳入非法參數,例如where id=234,別人卻輸入where id=234 or 1=1導致全部顯示,所以在web的表單中使用''或""來用字串,在動態url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql資料庫是非常危險的;

11.在傳遞資料給mysql時檢查一下大小;

12.應用程式需要連線到資料庫應該使用一般的使用者帳號,只開放少數必要的權限給該使用者;

13.在各寫程式介面(c c++ php perl java jdbc等)中使用特定『逃脫字元』函數;

在網際網路上使用mysql資料庫時一定少用傳輸明文的資料,而用ssl和ssh的加密模式資料來傳輸;

14.學會使用tcpdump和strings工具來檢視傳輸資料的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通使用者來啟動mysql資料庫服務;

15.不使用到表的聯結符號,選用的參數 –skip-symbolic-links;

16.確信在mysql目錄中只有啟動資料庫服務的使用者才可以對檔案有讀和寫的權限;

17.不許將process或super權限付給非管理使用者,該mysqladmin processlist可以列舉出現用的執行的查詢文字;super權限可用於切斷用戶端連線、改變伺服器運行參數狀態、控制覆制複製資料庫的伺服器;

18.file權限不付給管理員以外的使用者,防止出現load data '/etc/passwd'到表中再用select 顯示出來的問題;

19.如果不相信dns服務公司的服務,可以在主電腦名稱容許表中只設定ip數字位址;

20.使用max_user_connections變量來使mysqld服務程式,對一個指定帳戶限定連線數;

21.grant語句也支援資源控制選項;

22.啟動mysqld服務程式的安全選項開關,–local-infile=0或1 若是0則用戶端程式就無法使用local load data了,賦權的一個例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使用–skip-grant-tables系統將對任何使用者的訪問不做任何訪問控制,但可以用 mysqladmin flush-privileges或mysqladmin reload來開啟訪問控制;預設情況是show databases語句對所有使用者開放,可以用–skip-show-databases來關閉掉。

23.碰到error 1045(28000) access denied for user 'root'@'localhost' (using password:no)錯誤時,你需要重新設定密碼,具體方法是:先用–skip-grant-tables參數啟動mysqld,然後執行 mysql -u root mysql,mysql>update user set password=password('newpassword') where user='root';mysql>flush privileges;,最後重新啟動mysql就可以了。