PHP MySQL选择没有空格

时间:2014-05-24 03:05:59

标签: php mysql

我当前的查询看起来像这样:

$result = mysqli_query($con,"SELECT GroupID FROM guests WHERE FirstName='$FirstName' AND LastName='$LastName'");

但是,当输入他们的名字或姓氏时,客人可能会决定在他们的名字中加上一个空格(例如Anne Marie或annemarie或AnneMarie都应该是同一个人)。我想要做的是能够执行我的上述代码,但是对于where语句,仅基于字母和忽略空格和大小写进行比较。我希望这是有道理的!

我将预先填好桌子"客人"我的客人名字。我不想在没有大写字母或空格的情况下输入他们的名字,因为这些信息也将用于联系他们。

帮助?

3 个答案:

答案 0 :(得分:4)

大写由字符串的整理处理,但您可以覆盖它。

执行所需操作的where子句可写为:

WHERE lower(replace(FirstName, ' ', '')) ='$FirstName' AND
      lower(replace(LastName, ' ', '')) = '$LastName'

这假定$FirstName$LastName是小写且没有空格。

那就是说,你应该切换到一个不推荐使用的界面,如mysqli_或PDO。并且,您应该使用参数而不是将用户输入直接嵌入到查询字符串中(这会使您的系统容易受到SQL注入的影响)。

答案 1 :(得分:1)

使用TRIM函数从字符串中删除前导空格和尾随空格,如下所示

SELECT GroupID 
FROM guests 
WHERE TRIM(FirstName)=TRIM('$FirstName')
AND TRIM(LastName)=TRIM('$LastName')

TRIM()会帮助您摆脱前面或末尾的空格,但是如果您有Anne Marie这样的字符串,那么您需要使用REPLACE()函数删除所有出现的内容在你的字符串中的空格(正如戈登已经在他的回答中指出的那样)

REPLACE(LastName, ' ','')='$LastName'

答案 2 :(得分:0)

$sql = " SELECT GroupID ". 
"FROM guests ". 
"WHERE FirstName='".TRIM('$FirstName')."' ".
"AND LastName='".TRIM('$LastName')."'";

是最简单的方法。

如果你需要它的另一种选择: 我尝试将名称存储为小写,然后在使用它们时强制将第一个字母作为大写。

$FirstName = strtolower($FirstName);
$LastName = strtolower($LastName);

使用它们时,可以使用ucfirst($ str)来大写名称的第一个字符。

ucfirst($FirstName) ucfirst($LastName)