所以我试图做一个相当简单的任务,比较一个字符串和一个mysql表行/条目,例如。
SELECT * FROM table_name WHERE $string = table_column.
我的问题是,它是搜索并保持区分大小写。
The string: "A Long String"
The database entry "A Long String"
我的表被整理:latin1_swedish_ci
应该在不区分大小写的情况下搜索(就像我的其他查询一样),我相信因为字符串包含空格可能是问题所在,它只是查看第一个字符的大写。
我在我的查询中尝试使用'Upper'和'lower'比较以及使用'LIKE'我也尝试使用REPLACE删除空格但我可能做错了,不完全确定。但它似乎永远不会找到正确的条目,除非我在数据库中输入它。
任何建议都会很酷!
$result = mysqli_query($db, "SELECT * FROM character_information WHERE
(reference LIKE '".$origin_name."' AND char_name LIKE '".$char_name."')
OR
(lower(reference) LIKE '".$origin_name."' AND lower(char_name) LIKE '".$char_name."')
OR
(upper(reference) LIKE '".$origin_name."' AND upper(char_name) LIKE '".$char_name."')
AND
(char_gender = '".$char_gender."')");
另一次尝试?
$result = mysqli_query($db, "SELECT * FROM character_information WHERE
reference = '".$origin_name."' AND char_name = '".$char_name."' AND char_gender = '".$char_gender."'");
我知道这个是完全错误的,不是以这种方式使用REPLACE假设,应该在UPDATE或INSERT中使用吗?无论如何,你可以通过删除所有内容的空白来看到我想要做的事情。
$origin_name = str_replace(' ', '', $origin_name);
$char_name = str_replace(' ', '', $char_name);
$result = mysqli_query($db, "SELECT * FROM character_information WHERE
( (REPLACE(reference, ' ', '' )) LIKE '".$origin_name."' AND (REPLACE(char_name, ' ', '' )) LIKE '".$char_name."%')
AND
(char_gender = '".$char_gender."')");
答案 0 :(得分:1)
不需要同时进行上下比较。如果您将数据库中的列和搜索项都转换为同一查询的一部分,那么您将确保不区分大小写。
mysqli_query($db, 'SELECT * FROM table_name WHERE LOWER(table_column) = LOWER(\'' . $value . '\')');
或者检查列是否包含值而不是等于它:
mysqli_query($db, 'SELECT * FROM table_name WHERE LOWER(table_column) LIKE LOWER(\'%' . $value . '%\')');
答案 1 :(得分:0)
我刚刚意识到我做错了什么,
它返回结果但是在我得到结果之后我在if语句中比较了它们,例如/ $ string == $ db_string(我不需要,我不会这样做)知道我为什么这样做了)它给了我“假”#39;因为PHP考虑了区分大小写的数据。
对不起伙计们!