繁体   English   中英

PHP MySQL选择没有空格

[英]PHP MySQL Select no spaces

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

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

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

我将用我的客人姓名预填充“来宾”表。 我不想输入没有大写字母或空格的姓名,因为该信息也将用于联系他们。

救命?

大写由字符串的排序规则处理,但是您可以覆盖它。

满足您需要的where子句可以写成:

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

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

也就是说,您应该切换到未弃用的接口,例如mysqli_或PDO。 而且,您应该使用参数,而不是将用户输入直接嵌入查询字符串中(这会使您的系统易于进行SQL注入)。

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

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

TRIM()将帮助您消除开头或结尾的空格,但根据您的帖子,如果您有像Anne Marie这样的字符串,则需要使用REPLACE()函数来删除字符串中所有出现的空格(因为Gordon已经指出他的回答)

REPLACE(LastName, ' ','')='$LastName'
$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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM