MySQL SELECT语句使用PHP GET变量


MySQL SELECT statement using PHP GET variable

我有一个PHP脚本,它正在生成MySQL选择语句:

从单词中选择*,其中单词="经典"

单词表中正好有一个单词的变量单词等于Classic。

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

select语句中的单词Classic来自一个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];
?>

请,请,请清除那个词。mysql_real_escape_string()应该做到这一点。

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

只是为了解释:"="应该适用于完全匹配。这包括大小写、空格等。在查询中使用它之前,您可能也应该先修剪该结果。

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

无论哪种方式,Sourabh都是对的,尽管在性能方面,这在尝试匹配精确字符串时并不是一个大问题,但您应该首先在其他地方查找问题(例如,数据库中的项目是否完全匹配?)。

首先,您不应该接受任何用户输入,并在不清理或使用准备好的语句的情况下直接将其输入到查询中。

现在我们已经解决了这个问题:您有没有尝试过用写入的变量和字符串执行strcmp()?如

echo strcmp($_GET['word'],"Classic")

如果得到的结果不是0,则意味着它们不相同,很可能在$_get变量中会有某种类型的空白。用trim()去掉空白。也可能是一个案件敏感性问题。