[英]I'm not able to pass my ip-address as an input to my database in mysql usnig c#
我无法使用C#代码将ip地址作为输入传递给mysql中的数据库:
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
。 这就是为什么数字有效,但IP地址带有“ ASCII”却无效的原因。
将其添加到撇号
string Query = ("SELECT mobile FROM UserDetails where machine_ip='" +ipaddress+ "'");
似乎您应该用'括住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';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.