由于连字符,where子句中的未知列

时间:2011-04-18 18:10:01

标签: php mysql

PHP存在轻微问题,这使我感到恶心。我有一个非常基本的查询,由PHP调用,以查找此页面的相应文章。网址看起来有点像这样:

http://zconnect.org.uk/article/new-dead-island-screenshots

改编自:

http://zconnect.org.uk/index.php?action=article&p=new-dead-island-screenshots

查询非常简单,代码如下:

$article = $_GET['p'];
$rowquery = mysql_query("SELECT * FROM articles WHERE friendlytitle = '$article'") or die(mysql_error());

然而,这不起作用。出现的错误如下所示:

Unknown column 'new' in 'where clause'

但是当你刷新页面时,它似乎正在工作。我完全不知道如何解决这个问题,因为它在第一次尝试访问它时发生在每个页面上,但在刷新后似乎工作正常。知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

试试这个:

$article = mysql_real_escape_string($_GET['p']);

doc

答案 1 :(得分:2)

首先,你绝对应该逃避$ article,因为来自$ _GET []的查询字符串很容易操作。我更喜欢的是在它自己的变量中构建查询(更容易调试,因为你可以回显变量):

$article = mysql_real_escape_string($_GET['p']);
$query = 'SELECT * FROM `articles` WHERE `friendlytitle` = "'. $article .'"';
$rowquery = mysql_query($query) or die(mysql_error());

编辑:有点晚了,我想:)

答案 2 :(得分:1)

你需要做两件事:

  1. 验证您的输入。现在任何人都可以提交任何使您的代码易受sql injection attack

  2. 攻击的内容
  3. 在将输入作为查询的一部分之前清理输入

    $ article = mysql_real_escape_string($ _ GET ['p']);

    一旦你这样做,你就会好起来。

答案 3 :(得分:0)

尝试转义代码以避免使用撇号破坏查询:

$article = mysql_real_escape_string($_GET['p']);
$rowquery = mysql_query("SELECT * FROM articles WHERE friendlytitle = '$article'") or die(mysql_error());