如何在SQL中搜索列中的确切字符串

时间:2011-07-03 19:58:04

标签: php mysql sql

我的目标是在A列中搜索字符串B,如果找到它,则返回找到它的行,如果找不到,我也需要知道它以便采取不同的路线行动。

我目前的PHP代码:

$string = "teststring";
$searchquery = "SELECT *
                  FROM AllStringsTable 
                 WHERE `Column_A` LIKE '$string'"

$searchresult = mysql_query($searchquery) or die(mysql_error());
$row = mysql_fetch_row($searchresult);
echo "The returned row was: $row";

这只是打破并且什么都不做,所以我想我离开这里了。另外,我已经读过,对于不需要通配符子串等的精确字符串搜索,不需要LIKE。所以我不确定我会用什么......

2 个答案:

答案 0 :(得分:3)

你快到了。您需要%通配符:

// First, prevent sql injection with mysql_real_escape_string
$string = mysql_real_escape_string($string);

$searchquery = "SELECT * FROM AllStringsTable WHERE `Column_A` LIKE '%{$string}%'";
//  ----------------------------------------------------------------^^^-------^^^

$searchresult = mysql_query($searchquery) or die(mysql_error());

if (mysql_num_rows($searchresult) == 0) {
  echo "no rows found";
}
else {

  // You need to loop over the result resource to get all the rows.
  // Better to use mysql_fetch_array()
  while ($row = mysql_fetch_array($searchresult)) {
    $print_r $row;
}

答案 1 :(得分:2)

如果您想进行完全匹配,请使用 = 代替 LIKE

SELECT ... WHERE Column_A = '$string';

如果您想进行子字符串匹配(我怀疑它更符合您的要求),请将 LIKE 与%通配符一起使用:

SELECT ... WHERE Column_A = '%$string%';

不同之处在于第一个查询要求整个Column_A与完全匹配。第二个查询只要求在列的某处找到确切的单词。