我当前的查询看起来像这样:
$result = mysqli_query($con,"SELECT GroupID FROM guests WHERE FirstName='$FirstName' AND LastName='$LastName'");
但是,当输入他们的名字或姓氏时,客人可能会决定在他们的名字中加上一个空格(例如Anne Marie或annemarie或AnneMarie都应该是同一个人)。我想要做的是能够执行我的上述代码,但是对于where语句,仅基于字母和忽略空格和大小写进行比较。我希望这是有道理的!
我将预先填好桌子"客人"我的客人名字。我不想在没有大写字母或空格的情况下输入他们的名字,因为这些信息也将用于联系他们。
帮助?
答案 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)