Excel是不是資料庫? 在談這個問題之前,我們先實際試著使用PHP連接Excel資料表單,再來討論Excel與資料庫的關係。
PHP連接Excel資料表單,可以用以下步驟來達成 :
(1) 先透過ODBC來定義資料來源。
以前在Windows介面可以由控制台透過ODBC來定義資料來源,但是到了Windows 11就找不到了,但是其實那個程式還是在Windows 11的系統裡面。
我們可以從 windows/system32/ 目錄下找到 odbcad32.exe 檔案 :
接著輸入資料來源名稱,這個名稱由你自己定義,這裡我輸入了 myexcel,然後按下「選取活頁簿」。
(2) 再來要讓PHP知道怎麼連接這個ODBC定義好的資料來源。
打開PHP的設定檔 php.ini,找到以下設定 :
;extension=odbc
把註解符號去掉,變成
extension=odbc
再重新啟動PHP,這樣PHP就帶入了ODBC的驅動程式了。
(3) 寫一個測試的PHP程式,並準備好Excel檔案。
測試的PHP程式 test.php 如下 :
<?php
$conn = odbc_connect('myexcel','','');
$query = 'select * from [test$]';
$rs = odbc_exec($conn, $query);
while (odbc_fetch_row($rs)) {
$myname = odbc_result($rs, 'myname');
$myphone = odbc_result($rs, 'myphone');
echo "MyName : $myname Myphone : $myphone <P>";
}
?>
因為剛剛定義了一個 myexcel 的資料來源,所以使用 $conn = odbc_connect('myexcel','',''); 來連接,後面兩個空白原本是使用者帳號跟密碼,因為Excel檔案沒有帳號跟密碼,所以空白即可。
$query = 'select * from [test$]'; 的意思是從 test 這個活頁簿來存取資料。
$myname = odbc_result($rs, 'myname'); 的意思則是test 這個活頁簿有個myname的欄位。
在這個練習中,我們可以看到 Excel的「活頁簿」像是一個「資料表單」,而活頁簿的第一列可以定義為資料表單的「欄位」,第二列以下就是「資料列」。
再回到最開頭的問題 : Excel是不是資料庫?
因為Excel可以「模擬」為資料庫,因此你可以說「Excel是資料庫」,但是可以被存取,具備「資料表單」特性,具備「欄位」跟「資料列」,就是資料庫嗎?
資料庫(Database)是一種系統化的資料儲存方式,用來有效管理、檢索和操作資料。要被稱為資料庫,看起來 Excel 似乎是這麼回事,但是就嚴謹的資料庫定義來說,Excel缺乏了以下特性 :
(A) 資料的安全性 : 沒有使用者權限管理機制。
(B) 資料的一致性與完整性 : 無法透過主鍵、外鍵等約束來關聯資料。
(C) 資料的並行控制 : 無法處理鎖定等需求。
(D) 支援交易管理 : 沒有回復(rollback)功能。
(E) 資料的可擴展性 : 無法因應資料增加而擴展。
(F) 資料索引 : 沒有索引功能。
結論 :
Excel雖然可以模擬資料庫的部分特性,但是並不具備資料庫所有的特性。因此廣義來說,Excel可以稱為資料庫,但是狹義來說,Excel並不是資料庫。
另外,從以上的練習,看起來似乎可以將 $query = 'select * from [test$]'; 修改為其他的SQL指令。
例如
$query = 'delete from [test$]';
或是
$query = "delete from [test$] where myname='John'";
但是都會產生錯誤訊息,因為ODBC對於PHP連接Excel,只有讀取的功能,並沒有刪除/修改/插入。如果需要額外的功能,必須使用其他程式庫。
0 留言