解决mysql查询,in条件参数为带逗号的字符串,查询结果错误

解决mysql查询,in条件参数为带逗号的字符串,查询结果错误,第1张

如有以下sql:

T1.limit_user 为account表中查询出来的值

‘9,8,4’

查询sql正确查询结果应为:

不可推荐 ,推销客户,推销客户

实际结果为:

不可推荐

原因:

在mysql中in里面如果是字符串的话,会自动转化成int类型的,内部使用了如下方法: CAST('4,3' AS INT)

导致’4,3‘ 变成了4,所以上述查询sql结果只有第一个。

解决方案

FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')

正确的sql

参数化查询是指在设计与数据库连结并访问数据时,在需要填入数值或数据的地方,使用参数 来给值,这个方法目前已被视为最有效可预防SQL注入攻击的攻击手法的防御方式。

$query=sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",

mysql_real_escape_string($Username),

mysql_real_escape_string($Password))

mysql_query($query)

或是

$db=new mysqli("localhost","user","pass","database")

$stmt=$mysqli->prepare("SELECT priv FROM testUsers WHERE username=? AND password=?")

$stmt->bind_param("ss",$user,$pass)

$stmt->execute()

MYSQL在创建索引后对索引的使用方式分为两种:\x0d\x0a1 由数据库的查询优化器自动判断是否使用索引;\x0d\x0a2 用户可在写SQL语句时强制使用索引\x0d\x0a\x0d\x0a下面就两种索引使用方式进行说明\x0d\x0a第一种,自动使用索引。数据库在收到查询语句后会查看where语句后面的查询条件,同时查看在表上面有哪些索引,然后根据查询条件和索引进行匹配。\x0d\x0a查询条件和索引的匹配包括查询字段与索引字段的匹配和查询类型和索引类型的匹配。前者很好理解,就是查询条件的属性上要建有索引,后者则是说查询条件必须能够使用索引,比如等值判断和范围查询可以使用B+树索引,而hash索引只能适用于等值判断。\x0d\x0a在找到与查询条件匹配的索引后,就是进行代价估计来决定是否使用索引,代价估计主要根据要访问的就数量,一般来说如果通过索引访问的记录数量占全表记录数量15%以上,则不会使用索引而是使用全表扫描,因为此时使用索引的代价更大。在大多数情况下使用索引是会提高效率的。\x0d\x0a经过优化器的判断,最终会决定是否使用索引\x0d\x0a \x0d\x0a第二种,强制使用索引,主要是通过SQL语句实现的\x0d\x0aselect * from table force index(PRI) limit 2(强制使用主键)\x0d\x0aselect * from table force index(ziduan1_index) limit 2(强制使用索引"ziduan1_index")\x0d\x0aselect * from table force index(PRI,ziduan1_index) limit 2(强制使用索引"PRI和ziduan1_index")\x0d\x0a也可以禁止索引的使用\x0d\x0aselect * from table ignore index(PRI) limit 2(禁止使用主键)\x0d\x0aselect * from table ignore index(ziduan1_index) limit 2(禁止使用索引"ziduan1_index")\x0d\x0aselect * from table ignore index(PRI,ziduan1_index) limit 2(禁止使用索引"PRI,ziduan1_index")


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6095400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存