查询不适用于URL内部的放大器

时间:2011-10-15 00:23:45

标签: php mysql get

让我尽我所能地解释一下。

我有一个名为funcs.php的PHP文件,其中正是这个PHP代码:

$q = $_GET["q"];

$sql = "SELECT * FROM bl_zrify WHERE Name = '".$q."'";

$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
  {

  if ($row['State'] == '') {
    $SchoolState = 'Unknown';
  }
  else if ($row['State'] == 'AL') {
    $SchoolState = 'Alabama';
  } 
  else if ($row['State'] == 'AK') {
    $SchoolState = 'Alaska';
  } 
  else if ($row['State'] == 'AZ') {
    $SchoolState = 'Arizona';
  }
  else if ($row['State'] == 'AR') {
    $SchoolState = 'Arkansas';
  }

  print 'This school is in';
  print $SchoolState;
  }

当我在浏览器中打电话时:

url example => http://www.domain.com/funcs.php?q=ABRAHAM BALDWIN农业学院

它通常有效,返回=>这所学校在阿拉巴马州

但是当我在浏览器中调用任何内部有&(&)的网址时,根本无法使用:

url example => http://www.domain.com/funcs.php?q=BRYANT&斯特拉顿商学院 - 水牛城

我不知道为什么,但是对于某些原因,当URL中有amp(&)时我没有得到任何结果,请帮助!

2 个答案:

答案 0 :(得分:3)

funcs.php?q=BRYANT & STRATTON BUSINESS INSTITUTE - BUFFALO

您正在传递两个变量。做一个var_dump($_GET);你会看到。

你可能意味着:

funcs.php?q=BRYANT+%26+STRATTON+BUSINESS+INSTITUTE+-+BUFFALO

要传递URL中参数的值,它们需要正确的编码。也称为url-encoding。 &是一个特殊字符,需要写为%26,空格也是一个特殊字符,可以写成+%2b。也称为百分比或三重编码。

PHP中的一个函数是:urlencodeDocs

在任何情况下,您都需要正确编码SQL查询的搜索词,否则您允许其他人更改SQL查询并执行搜索超出您想要的内容甚至删除数据库。这比丢失一半变量值更严重。

请参阅: Best way to stop SQL Injection in PHP

答案 1 :(得分:1)

'&安培;'分隔URL参数。您的第二个查询的参数q等于“BRYANT”,参数STRATTON BUSINESS…没有值。