过去我使用mysqli类的query
方法。现在我正在使用prepare方法重写很多代码。我有一个排序规则为utf8mb4_bin
(区分大小写(的表,但用户应该执行不区分大小写的查询,过去的查询是这个
SELECT SQL_CALC_FOUND_ROWS * FROM utenti WHERE nome LIKE _utf8mb4 ? COLLATE utf8mb4_unicode_ci ORDER BY id_utente ASC
我知道我不能在准备好的语句中使用这种语法,什么是最好的方法?我认为强制存储值和查询值小写,但我认为这不是最好的方法
您应该能够对列应用不区分大小写的排序规则,然后将其与您的参数进行比较:
SELECT * FROM utenti
WHERE nome COLLATE utf8mb4_unicode_ci LIKE ?
ORDER BY id_utente ASC
附言:我建议删除SQL_CALC_FOUND_ROWS
。如果不使用LIMIT
,它就没有任何用途。这只会让表演变得糟糕。
您所需要做的就是用php将值转换为大写,并在查询中用upper
包装您的列。
select * from table where upper(column) like ?
用?设置为您要查找的字符串的大写值。