我'm不能传递我的ip地址作为输入到我的数据库mysql使用c#
本文关键字:我的 输入 数据库 使用 mysql 地址 ip 不能 | 更新日期: 2023-09-27 18:04:53
我不能通过我的IP地址作为输入到我的数据库在mysql使用c#我的代码:
string Query = ("SELECT mobile FROM UserDetails where machine_ip=" +ipaddress);
如果是一个看起来像这样的字符串,它可以正常工作:"1234567890"但是如果它看起来像这样就不能工作了:"127.0.0.0"
试试这个:
"SELECT mobile FROM UserDetails where machine_ip = '" + ipaddress + "'"
另外,如果这是面向最终用户的代码,您应该考虑使用参数化查询来避免SQL注入漏洞。
你不需要在SQL字符串中加上引号吗?或者更好的是,使用参数化查询(这样可以帮助您抵御SQL注入攻击)
如果不知道数据库的组成,很可能machine_ip
不是VARCHAR
。这就是为什么数字可以工作,但带有"ASCII"的IP地址不能。
添加到撇号
string Query = ("SELECT mobile FROM UserDetails where machine_ip='" +ipaddress+ "'");
似乎你应该用'这样的:
"SELECT mobile FROM UserDetails where machine_ip='" + ipaddress + "'"
如果你在数据库中存储的ip地址没有点,比如127001,你应该从你的输入字符串ip中删除点
string res = inputId.Replace(".","");
在SQL语句中使用参数化查询
127.0.0.0
不能隐式地转换为字符串,因此您必须这样调用它:
("SELECT mobile FROM UserDetails where machine_ip='" + ipaddress + "'");
哦,请注意SQL注入。
在数据库中存储IP地址有两种方式,一种正确的方式和一种错误的方式。
正确的方法是将IP地址转换成以10为基数的整数——127.0.0.1变成2130706433,192.168.10.10变成3232238090。
错误的方法是将带有句点的值存储为字符串。
如果存储IP的人使用了正确的方式,那么您只需要在查询中的INET_ATON调用中包装您的IP地址,如下所示:
SELECT mobile FROM UserDetails where machine_ip=INET_ATON('127.0.0.1');
如果表中的IP地址存储为字符串,你只需要把你的地址用单引号括起来,一切都应该正常工作(尽管效率较低)。
SELECT mobile FROM UserDetails where machine_ip='127.0.0.1';