2016-02-27 32 views
1

我動一個PHP頁面到我的Joomla網站,我被告知,我「應該使用Joomla的編碼標準和方法的一切,這包括數據庫查詢」Transfotm PHP SQL到Joomla SQL查詢

我的問題是:

我應該如何改變有關標準的Joomla我的舊的PHP代碼:

$query = "SELECT * FROM `TABLE 2` WHERE Power=".$input->get('Power', '', 'RAW')." AND Poles=".$input->get('Poles', '', 'RAW').""; 

$results = mysql_query($query) 
or die(mysql_error()); 
while ($row = mysql_fetch_array($results)) 
{ 
extract($row); 
} 
?> 

這是表2的內容。我使用每行的值作爲我的頁面上的變量。

enter image description here

+0

特奧多爾,請記住你可以問上[的Joomla堆棧交易所(HTTP您的問題: //joomla.stackexchange.com),這是Joomla專用的Stack Exchange站點;) – Lodder

回答

1

更重要的是確保過濾輸入不允許SQL注入。似乎你的輸入都是數字(Power是一個浮點數,Poles可能是一個整數?)。同樣在表名中使用#__ - ,當你在joomla函數中使用它時,它將被表格所取代。改變你的代碼最簡單的方法是這樣的:

$app = JFactory::getApplication(); 
$power = $app->input->getFloat('Power'); // use the correct function 
$poles = $app->input->getInt('Poles'); // for the datatype you want 

here爲JInput文檔

$db = $app->getDbo(); 
//short variant 
$sql = "SELECT * from `#__table 2` WHERE power = " 
    . $db->quote($power) . " AND poles = " . $db->quote($poles); 
$db->setQuery($sql); 
$result = $db->loadRowList(); 
foreach($result as $array){ 
    print_r($array); 
} 

應當指出的是,有用於檢索的數據關聯,loadAssoc/loadAssocList更多有用的方法數組,對象的loadObject/loadObjectList。檢查docs for JDatabaseDriver

或者你可以改變查詢到「的Joomla查詢」,如:

$q = $db->getQuery(); 
$q->select("*")->from($q->quoteName("#__Table 2")); 
$q->where("Power = " . $db->quote($power)); 
$q->where("Poles = " . $db->quote($poles)); 
$db->setQuery($q); 
... 

Docs to JDatabaseQuery

+0

不要忘記跳過表名;) – Lodder

+0

你是對的,Lodder,糾正了:) – jonasfh

+0

你好! 我試過做,但它返回一個空白頁:( –