Joomla禁用数据库错误

时间:2014-04-01 11:09:41

标签: joomla

我在joomla上使用db->转义方法转义所有输入。 例如:

site.com/index.php?view=test&id=5'

在我的模型中,我在查询中使用id, 查询代码:

$db= JFactory::getDBO();
$id = $db->escape($id);
$query="SELECT name FROM jos_test WHERE id=$id"                     
$database->setQuery($query);
$result = $database->loadResult();

现在,我添加一个'结束网址 Joomla在'之前添加反斜杠 但是它会给出语法错误并显示表名。这是一个安全问题 如何禁用joomla sql语法错误?

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 1 SQL=SELECT `name` FROM `jos_test` WHERE id=5\'

3 个答案:

答案 0 :(得分:0)

你应该使用其中任何一个来解析你的GET参数 JRequest::getVar方法,如果这是旧的Joomla 1.5或 在Joomla 2.5 / 3 +中使用JInput类。

$input=JFactory::getApplication()->input;
$id = $input->get('id', 0, 'INT');

通过这种方式,您可以安全地将它们与数据库查询一起使用。 另外,进行数据库查询的正确方法是described here

最后在通过编辑configuration.php文件上市前确保disable error reporting。将$error_reporting参数更改为'None'

答案 1 :(得分:0)

尝试以下方法:

$db = JFactory::getDbo();    
$query = $db->getQuery(true);     
$query->select($db->quoteName('name'))
      ->from($db->quoteName('#__test'))
      ->where($db->quoteName('id') . ' = ' . $id);    
$db->setQuery($query);    
$results = $db->loadResult();

这使用了最新的数据库查询编码标准。

希望这有帮助

答案 2 :(得分:0)

你应该尝试这样的东西(从表名中我假设你正在使用Joomla 1.5):

$db = JFactory::getDBO();
$id = JRequest::getVar('id', 0, 'INT');

$query="SELECT name FROM #__test WHERE id = " . $id;
$db->setQuery($query);
$result = $db->loadResult();

在Joomla 3中,您可以使用查询构建器并避免使用depreached JRequest:

$db = JFactory::getDBO();
$id = JFactory::getApplication()->input->get('id', 0, 'INT');
$query = $db->getQuery(true);
$query->select('name')
  ->from('#__test')
  ->where('id = ' . $id);
$db->setQuery($query);
$result = $db->loadResult();