2015-07-11 42 views
1

我是一個PHP和MySQL的noob。我正在尋找一種方法來訪問我的數據庫中的表格,並以行格式獲取數據。我發現以下代碼:有沒有一種方法來定義在API中的表名稱Url

<?php 

$con = mysql_connect("localhost","someuser","somepassword"); 

if (!$con) 
    die('Could not connect: ' . mysql_error()); 

mysql_select_db("TestDatabase", $con); 

$result = mysql_query("SELECT * FROM Customer"); 

$output = array(); 
if ($result) 
    while ($row = mysql_fetch_assoc($result)) 
     $output[] = $row; 

print(json_encode($output)); 

mysql_close($con); 

?> 

現在的問題是我有大約超過24個表在我的數據庫。所以我希望有沒有辦法通過像API這樣的訪問URL輸入表的名稱。如果有,那麼請幫助我。提前致謝!!!

回答

1

有一個非常簡單的方法可以通過url傳遞一些請求類型id(表)。

但是沒有采取適當的措施,這是要求大麻煩

想象一下,您使url看起來像https://myserver.com/myfile.php?table=aaa,然後將您的查詢更改爲"select * from {$_GET['table']}"。然後,惡意用戶可能會欺騙您的代碼,從您有權訪問的任何數據庫/表中選擇數據(使用dbname.table),其中包括mysql系統表(如mysql.user)。從您的原始文章中可以看出,您正在使用root用戶訪問數據庫,並且最有可能訪問所有內容 - 通常最好創建一個單獨的數據庫用戶,該用戶只能訪問需要執行的操作。

另一點是,你必須總是驗證/逃避用戶的輸入,使得它爲sql查詢(或使用一個API,它可以做變量綁定),因爲這樣任何惡意用戶可能會在您sql服務器上執行任意代碼。請查詢sql injection以瞭解更多信息。

舉一個簡單的解決方案,我會建議使用這樣的代碼來明確地允許特定的表:

$allowedtables=array('aaa'=>1,'bbb'=>1); 
if (!$allowedtables[$_GET['table']]) 
    return; 
$query="select * from {$_GET['table']}"; 

不同的,但不是那麼重要的話題,不推薦任何新的代碼使用過時的API。 ..

+0

爲喜炎我已經創建了一個API,它的網址是這樣的: HTTP://mywebsite/api/folder/index.php 但每當我嘗試訪問它,它給了我一個錯誤。你能幫忙嗎? –

+0

最有可能的錯誤是有關服務器/ php錯誤配置... – bbonev

1

PHP提供了三種不同的MySQL API擴展:

  1. MySQL的改進擴展:該擴展完全支持在MySQL 5.0中使用的認證協議,以及所製備的語句和多個語句的API。另外,這個擴展提供了一個高級的,面向對象的編程接口。

  2. MySQL函數(PDO_MYSQL):它是PHP數據庫抽象層PDO(PHP數據對象)的MySQL驅動程序。 PDO MySQL驅動程序位於PDO本身下面的層中,並提供MySQL特定的功能。該擴展從PHP 5.1.0開始提供。

  3. 原始的MySQL API:適用PHP版本4和5中,此擴展到MySQL 4.1旨在用於的MySQL版本使用之前。該擴展不支持MySQL 4.1中使用的改進的身份驗證協議,也不支持預準備語句或多個語句。要使用這個擴展的MySQL 4.1中,你可能會配置MySQL服務器設置old_passwords系統變量爲1

Original MySQL API從PHP 5.5.0已被刪除。如果您使用PHP 5.5.0或更高版本,則必須遷移到mysqliPDO_MySQL

您可以參考here可用的文檔以供進一步參考。

相關問題