繁体   English   中英

我无法将ip地址作为输入传递给mysql usnig c#中的数据库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM