我'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"

我'm不能传递我的ip地址作为输入到我的数据库mysql使用c#

试试这个:

"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';