使用PHP GET变量的MySQL SELECT语句

时间:2012-09-05 17:05:07

标签: php mysql database select

我有一个生成MySQL select语句的PHP脚本:

从word ='Classic'

的单词中选择*

单词表中只有一个单词,变量单词等于Classic。

当我的PHP页面执行时,我从查询中得不到任何结果。如果我回显用于执行查询的字符串,将其剪切并粘贴到数据库中PHPMyAdmin的SQL窗口中,我也没有得到任何结果。但是,如果我将该EXACT字符串重新键入PHPMyAdmin的SQL窗口(使用相同的引号字符),我会得到一行的正确结果。

select语句中的经典一词来自PHP GET(参见下面的代码)。我可以回显$ word变量,并获得'Classic'的正确结果。我做错了什么?

这是我的代码:

<?php

  require ('dbconnect.php');

  $word = $_GET["word"];

  $selectStr = "SELECT * FROM words WHERE word = '" . $word . "'";

  if ($results = MySQL($dbName, $selectStr))
  {
    $rowCount = MySQL_NUMROWS($results);
  }

  $resultRow = MYSQL_FETCH_ROW($results);

  $wordID = $resultRow[0];

?>

2 个答案:

答案 0 :(得分:3)

请拜托,请消毒那个词。 mysql_real_escape_string()应该做到这一点。

$selectStr = "SELECT * FROM words WHERE word LIKE '" . $sanitized_word_i_promise . "'";应该有效:)

只是解释:“=”应该适用于完全匹配。这包括大写/小写,空格等。在查询中使用它之前,您应该首先修剪该结果。

如果您在数据库中存储了foo(请注意末尾的空格) - 它将与foo不匹配,没有空格。您可能希望使用LIKE 'foo%' - 。

无论哪种方式,Sourabh是对的,虽然性能明智,但在尝试匹配完全字符串时这不是一个大打击,你应该首先在其他地方寻找问题(例如,数据库中的项目是否准确匹配吗?)。

答案 1 :(得分:2)

首先,您不应该接受任何用户输入并直接将其输入到查询中,而无需对其进行清理或使用预准备语句。

现在我们已经解决了这个问题:你试过用变量和你的字符串写入strcmp()吗?如

  

echo strcmp($ _ GET ['word'],“Classic”)

如果得到的结果不是0,则意味着它们不相同,很可能在$ _GET变量中会有某种空格。在其上使用trim()来取出空格。也可能是一个区分大小写的问题。