[MySQL]left, right, inner, outer join 使用方法

最近在高雄面試的時候,被問到的資料庫問題,什麼是 left join,out join,inner join,其實這些都是寫基本 SQL 語法需要知道的,當然我比較少用到 out join,不過還是要知道一下比較好喔,底下來說明一下這些,整理一些心得 表格 test1 資料表 2 (by appleboy46) 表格 test2 資料表 1 (by appleboy46) Continue reading “[MySQL]left, right, inner, outer join 使用方法”

[MySQL] 實做 MySQL Master-Master Replication 同步

今天無聊實做了 MySQL 資料庫同步化,那可以先看看 MySQL Master Slave Replication,中文網站可以上 google 查詢或者是看看這一篇:MySQL 設定 Replication (Master – Slave),基本上設定還蠻容易的,如果會 Master 同步到 Slave 的話,那 MySQL Master-Master 只是在用相同的方法在做一遍,如果不懂 MMM 的可以先參考這一篇:MySQL Master-Master Replication Manager(1) – 簡介,這篇寫的很清楚,今天看了文章,我實做起來,遇到一些問題,其實還蠻奇怪的,所以底下就來紀錄一下步驟,順便也說明一下。 實做兩台 Ubuntu 機器: db1:192.168.1.1 db2:192.168.1.2 先設定 db1: 目前我都是在 Ubuntu 7.10 底下實做的,那基本上只要有支援 MySQL 的 Linux 或者 FreeBSD 機器都可以實做這個方法: 步驟一:先修改 my.cnf 這個檔案: FreeBSD 的話在:/var/db/mysql/my.cnf Ubuntu:/etc/mysql/my.cnf 有的版本是在 /etc/my.cnf 所以不太一定,請依照自己的作業系統 修改:
#
# bind-address 請 mark 起來,因為我們必須讓 MySQL Listen 各個不同的 IP Address
#bind-address           = 127.0.0.1
#
# server id 請記得每台機器都設定不同喔
#
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
Continue reading “[MySQL] 實做 MySQL Master-Master Replication 同步”

[心得]2008八月份 SA@Tainan PHP 程式設計 – 初階資訊安全(8/30)

今天從嘉義跑到台南聽 酷!學園 舉辦的 2008八月份 SA@Tainan PHP 程式設計 – 初階資訊安全(8/30) ,今天一大早就起床了,差點沒趕上火車,到了台南地點在社區大學,其實蠻近的,大概騎車5分鐘就到了喔,其實不會很趕,到了現場,第一次看到梁楓大大阿,感覺很有威勢,我看現場年齡層分佈好像很廣,有很多都是長輩了,不過大部分還是學生為主,然後我想大概有很多是工作人員,其實我都不太認識,我大概只知道梁楓大大,因為在酷!學園也一段時間了,哈哈,今天講的主題,我非常的有興趣,我看投影片還蠻多的,可是都是跳著講,然後一些實做的部份,然後最後一小時是在解如何拿到 Linux 的主機 /etc/passwd 的資訊。 Continue reading “[心得]2008八月份 SA@Tainan PHP 程式設計 – 初階資訊安全(8/30)”

[轉載]MySQL 的 “SET NAMES xxx” 字元編碼問題分析

轉載自: PHPChina 近來接受 BBT 的培訓,做一個投票系統。系統程式碼倒不是很難,但是我的時間主要花費在了研究字符集和編碼上面。MySQL 和 Apache 兩個系統的編碼(字符集)問題讓我費勁腦筋,吃盡苦頭。網上對這些問題的解決比較零散,比較片面,大部分是提供解決方法,卻不說為什麼。於是我將這幾天收穫總結一下,避免後來者再走彎路。這篇文章對 PHP 編寫有一點幫助(看完你就知道,怎樣讓你的 PHP 程式在大部分空間提供商的伺服器裡顯示正常),但是更多幫助在於網路伺服器的架設和設置。 先說 MySQL 的字符集問題。Windows 下可透過修改 my.ini 內的
# CLIENT SECTION
[mysql]
default-character-set=utf8
# SERVER SECTION
[mysqld]
default-character-set=utf8
Continue reading “[轉載]MySQL 的 “SET NAMES xxx” 字元編碼問題分析”

[PHP]解決網站被 SQL injection 攻擊

其實這個安全性的問題,在目前台灣網站都存在這樣的問題,大家平常用 $_POST,$_GET 用得很順利,但是沒有想過帳號密碼被 SQL injection 破解,當網站被破解了,基本上你損失就是相當嚴重,網路上也有很多攻擊方式,不過這方法是最常被拿出來講的,我自己有一套解決方式,除了比較重要的地方,就是輸入帳號密碼的地方要加強防護之外,加上數字驗證碼,還要 check 帳號的特性,我底下是我驗證帳號密碼機制
    if($user_name == '' || $user_passwd == ''){
    	ErrMsg("帳號或密碼不得空白");
    }
    if (!preg_match('/^\w+$/', $user_name)){
    	ErrMsg("請勿攻擊本站台");
    }
Continue reading “[PHP]解決網站被 SQL injection 攻擊”

[DataBase] 備份 MySQL 3.23.49 轉到 MySQL 5 utf8 轉換到 utf8

最近在幫友人處理他們web跟資料庫的轉移,然後發現他們的資料庫是很古早的資料庫 MySQL 3.23.49 版本,相當古老吧,因為那個時候我才正值大二時代,剛開始接觸電腦的時候而已,連最基本的資料庫都不知道是什麼,哈哈經過這麼久終於發展到 MySQL 5版本了,不過從 MySQL 4.x 開始支援的 Unicode 系統,所以當時也有很多人遇到轉換問題,我今天也遇到相同問題,不過是在轉換到 Linux Centos 5.1 版本底下,原本機器使用 Red Hat Linux 7.3,真是一個很舊的版本,因為 Red Hat Linux 已經到 9.0 版本了,而且目前不維護了。 之前版本轉換都沒有什麼問題,就是 4.x 轉到 5.x 版本,參可我之前寫的這篇 [Mysql] 資料庫備份[big5]utf8轉換成utf-8,如果這篇文章解決不了的話,那就可能用我底下的方法了,不過過上面那個方法不適合用在 3.23 轉到 5.x 版,因為還是會發生亂碼現象,可是這只會發生在 Linux 底下,因為我用 FreeBSD 7.0 R 版,在這環境底下是沒有問題的,所以今天很囧,都在處理 Linux 的部份,哈哈,所以大家還是去用 FreeBSD 吧 Continue reading “[DataBase] 備份 MySQL 3.23.49 轉到 MySQL 5 utf8 轉換到 utf8”

[MySQL] outer join 使用

之前我遇到問題,有兩個表格 a 跟 b,分別利用 id 當作連接,當你使用 where a.id = b.id 的時候,當 b 資料表沒有對應到的時候,撈出來的資料就會少一筆,問題如下
: 想請教各位大大, : 如果我現在有兩個table t1,t2 : Table t1: : uid INT : name NCHAR(10) : Table t2: : uid INT : t1_id INT 參考到t1.uid : 我下一個SQL query: : SELECT t1.name, COUNT(t2.uid) : FROM t1,t2 : WHERE t2.t1_id=t1.uid : GROUP BY t1.name : 這樣會計算出每個t1.name項目在t2中所出現的次數。 : 但是如果次數為零時就不會顯示出來。 : 想請教大家,怎樣修改可以讓次數為零的t1.name也顯示出來呢?
解決方法:就是利用 outer join
$sql = "SELECT t1.t_name, count(t2.uid) as aa FROM " . $xoopsDB->prefix('teacher') . " as t1 LEFT OUTER JOIN " . $xoopsDB->prefix('student') . " as t2  on t1.tid = t2.st_teacher group by t1.t_name";
Xoops 寫法

[MySQL] 內建函式 MySQL Replace 功能

今天老師寄信給我,說我轉移的 journal.CN 的文章,出現以前的文章,不能看到圖片,我去查了一下,發現 AMS 文章系統的編輯軟體,相當爛,它的插入圖片,竟然是用絕對網址,然後他會先讀取 mainfile.php 裡面的
define('XOOPS_URL', 'http://journal.cn.ee.ccu.edu.tw');
然後把圖片的網址寫死,而不是動態的,就是利用相對路徑,所以我利用了 replace 的功能來解決全部文章圖片的問題,語法如下
update `xoops_ams_text` set `hometext` = replace(`hometext`,'140.123.107.38/~cnews','journal.cn.ee.ccu.edu.tw');
上面是說,取代 hometext 這個欄位的,找到 140.123.107.38/~cnews 取代成 journal.cn.ee.ccu.edu.tw 這語法相當好用,大家可以嘗試看看,畢竟如果用 php 的 replace 語法,還要利用陣列方式,比較麻煩