2013-11-04 31 views
0

我正試圖爲我們的產品設計一個小API。我們有一個MySQL數據庫,我正在使用一個小框架在PHP中創建簡單的GET/POST命令。API結果中的數據庫列名

我遇到的問題是我不確定如何從數據庫公開數據而不透露表中的列名。例如,在此刻,當有人發出GET請求到終點,我做這樣的事情,返回一些JSON數據:

$rs = mysql_query($sql); 
if($rs) $rsc = mysql_num_rows($rs); 

while($row = mysql_fetch_assoc($rs)) { 
    $data[] = $row; 
} 

header("HTTP/1.1 202 OK"); 
header("Access-Control-Allow-Origin: *"); 
header("Content-type: application/json", true); 
echo json_encode($data); 
exit; 

(是的,我知道,mysql_ *是壞的壞人壞事=)近15年的代碼基礎。將成爲一個有趣的時間轉換...)

這種做事的方式很好,很簡單,但它也把數據庫中的列名放在普通網站(我們一直在努力永不露面)。什麼將返回一個例子是:

[{"NewsID":"559110","Day":"10\/17\/13","UnixDT":"1382031900","Subject":"Testing formatting"},{"NewsID":"535214","Day":"09\/10\/13","UnixDT":"1378836900","Subject":"Check Template - use tempate from tempate mgr"}, 

是心中只是一些這個框架我需要習慣與面向公衆的API或是否有更好的方法,返回不使用的列數據名稱作爲關鍵名稱。我們之前從未構建過半公開的API,因此非常感謝任何觀點或反饋。

+2

您的SQL SELECT'XXX AS yyy'? – diggersworld

+0

非常感謝您的幫助。我認爲我正在努力的是我是否需要嘗試通過按照您的建議創建別名來「掩蓋」我的列名,或者我應該只使用列名自己。這是一個哲學問題而不是後勤問題。對不起,如果這不是很清楚。 – TheBrockEllis

+0

我目前正在自己​​開發一個API。我已經命名所有列,以便他們對開發者友好。只要您安全地構建您的系統,我不會看到列名出現問題。如果你有一個SQL注入點,那麼你可能有問題。 – diggersworld

回答

0

您可以用array_combine做到這一點,否則您將需要更新使用AS

$keys = array('a', 'b', 'c', ...); 

while($row = mysql_fetch_assoc($rs)) { 
    $data[] = array_combine($keys, array_values($row)); 
} 
+0

你好!非常感謝這個建議。我發佈了一個評論,關於我真正掙扎的問題是我是否需要「屏蔽」數據庫表的列名。 – TheBrockEllis