Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL bug还是别的什么?_Php_Mysql_Joomla_Get - Fatal编程技术网

Php SQL bug还是别的什么?

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

我在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 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"]."