我正在开发一个应用程序来监控ip地址活动。我在Ubuntu 12.04上使用LAMP堆栈。在mysql数据库中,我创建了一个包含两列的表,ip和mac,它们的数据类型都是varchar。我把一些数据放入表中,当我使用select*from table时,这就是的结果
ip mac
1 2
1.10.0.0.43 00 19 78 D3 R5 ED
8.9 32.22
中间一行是我期望来自开关的条目看起来的样子。第一个和第三个我把它们放在测试的目的。
我写了一个php代码来进行匹配和检索,如下所示
<?php
$var = $_REQUEST['IP'];
echo $var;
mysql_connect( "localhost", "root", "mysql" ) or die("Unable to connect to the database");
mysql_select_db( "syslog" );
$result = mysql_query( "SELECT ip,mac FROM arp_table where ip=$var" );
$row = mysql_fetch_row( $result );
print_r( $row );
?>
当我在表单上输入1时,结果是ok的,以1 Array([0]=>1[1]=>2)
的形式,当我输入8.9时,输出也是ok的。但当我输入1.10.0.0.43时,输出只是变量的echo,没有检索到数组。有人知道为什么会这样吗?
这是因为您没有在$var
周围使用引号。在SQL中使用字符串时,它们需要被引用,例如:
SELECT ip,mac FROM arp_table where ip='$var';
如果它们没有被引用,那么MySQL将解释您的值,并将自动转换为(例如)integer
,因为该值看起来像整数1
/2
。。。等等。
使用$var周围的引号来声明varchar datatyp
$result = mysql_query( "SELECT ip,mac FROM arp_table where ip='".$var."'" );
它与其他两个值一起工作,因为它们被解释为整数或浮点数据类型