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'
但是当你刷新页面时,它似乎正在工作。我完全不知道如何解决这个问题,因为它在第一次尝试访问它时发生在每个页面上,但在刷新后似乎工作正常。知道如何解决这个问题吗?
答案 0 :(得分:2)
答案 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)
你需要做两件事:
验证您的输入。现在任何人都可以提交任何使您的代码易受sql injection attack
在将输入作为查询的一部分之前清理输入
$ 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());