[英]Php Sql making select statement case insensitive
所以我基本上試圖檢查用戶名是否存在,但問題是人們通過改變大寫來冒充他人我需要防止我閱讀一些答案,但他們是 sql 中的“LIKE”運算符而不是
SELECT * FROM users WHERE nick=? LIMIT 1
我也可以在不同的大寫上使它返回 true 示例:數據庫上存在測試,但如果用戶嘗試注冊 testST 它應該返回它存在或 tEsT
[數據庫]
我試過這樣做:
$user_check_query = "SELECT * FROM users WHERE nick COLLATE utf8_bin = ? LIMIT 1";
$dts = $db->prepare($user_check_query);
$dts->bind_param('s', $nick);
$dts->execute();
它仍然沒有幫助。
嘗試使用二進制排序規則:
SELECT *
FROM users
WHERE username COLLATE utf8_bin = 'NicK'
如果您的列已經有不區分大小寫的排序規則,那么查詢應該沒問題,如果區分大小寫,您可以更改查詢
SELECT * FROM users WHERE lower(username) =lower('nick') LIMIT 1
但要停止這種情況,您需要對該列進行唯一約束:
alter table users
add constraint unique_usernames UNIQUE (username)
考慮排序規則不區分大小寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.