2016-02-27 64 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

你好! 我试过做,但它返回一个空白页:( –