Php SQL bug还是别的什么?
我在Joomla制作了一个简单的业余组件 其中有一个选择>选项下拉列表,可向URL添加参数 问题是,它不适用于1.1值,而适用于1.5值 我的一个朋友解决了这个问题,但我想知道为什么会发生 原始查询:Php SQL bug还是别的什么?,php,mysql,joomla,get,Php,Mysql,Joomla,Get,我在Joomla制作了一个简单的业余组件 其中有一个选择>选项下拉列表,可向URL添加参数 问题是,它不适用于1.1值,而适用于1.5值 我的一个朋友解决了这个问题,但我想知道为什么会发生 原始查询: $query = "SELECT * FROM `TABLE 2` WHERE Power='".$_GET["Power"]."' AND Poles='".$_GET["Poles"]."'"; 新的工作查询: $query = "SELECT * FROM `TABLE 2` WHERE
$query = "SELECT * FROM `TABLE 2` WHERE Power='".$_GET["Power"]."' AND Poles='".$_GET["Poles"]."'";
新的工作查询:
$query = "SELECT * FROM `TABLE 2` WHERE Power=".floatval($_GET["Power"])." AND Poles='".$_GET["Poles"]."'";
表列幂为浮点型或双精度型。在第一个查询中,您尝试插入一个字符串值。第二个查询通过首先将请求值强制转换为float并删除该值周围的引号来插入正确的float
顺便说一句,您永远不要在sql查询中使用未过滤的用户输入(例如$\u GET value)。如果您使用的是Joomla,那么您应该严格遵守Joomla的编码标准和方法,包括数据库查询: 您还应该使用
JInput
而不是$\u POST
或$\u GET
调用:
查看您的查询,它应该如下所示:
$db = JFactory::getDbo();
$input = JFactory::getApplication()->input;
$power = $input->get('Power', '', 'RAW');
$polls = $input->get('Pols', '', 'RAW');
$query = $db->getQuery(true);
$query->select($db->qn(array('*')))
->from($db->qn('#__table'))
->where($db->qn('Power') . ' = ' . $db->q($power), 'AND')
->where($db->qn('Polls') . ' = ' . $db->q($polls));
$db->setQuery($query);
$results = $db->loadObjectList();
// Do what you want with the $results object
使用这意味着列名和数据值被正确转义,并且您没有像@skidr0w提到的那样留下SQL漏洞
注意:
#
是数据库表前缀,假设您采用了这种方法。如果没有,只需将#uu table
替换为表的全名事实上,几天后我发现问题和解决方案更简单
只需移除“'”标志就解决了问题
Power='".$_GET["Power"]."'
与
关于您的查询容易受到SQL注入攻击。这是一种安全风险。有关更多信息,请参阅。我应该如何避免它?多好的解释!非常感谢您的耐心!致命错误:在线调用public_html/components/com_helloworld/views/dsql/tmpl/default.php中的非对象上的成员函数get()4@TeodorBochev-哦,对不起。更新了我的答案我的数据库是mysite_mydatabase,我的joomla数据库是mysite_joomla。我如何访问它?提前谢谢你!您应该将所有表放在Joomla数据库中。不要使用单独的数据库。完成后,
$db=JFactory::getDbo()代码>将为您处理连接。
Power=".$_GET["Power"]."