0

我正在开发一个应用程序来监控 IP 地址活动。我在 Ubuntu 12.04 上使用 LAMP 堆栈。在 mysql 数据库中,我创建了一个包含 2 列 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 时,结果是好的,1 Array([0]=>1[1]=>2)当我输入 8.9 时,输出也是好的。但是当我输入 1.10.0.0.43 时,输出只是变量的回声,没有检索到数组。任何人都知道为什么会这样?

4

2 回答 2

0

那是因为您没有在$var. 在 SQL 中使用字符串时,它们需要被引用,例如:

SELECT ip,mac FROM arp_table where ip='$var';

如果它们没有被引用,那么您的值将被 MySQL 解释并自动转换为(例如)integer,因为该值看起来像一个整数1/ 2... 等等。

于 2013-09-04T12:13:53.400 回答
0

在 $var 周围使用引号来声明 varchar 数据类型

$result = mysql_query( "SELECT ip,mac FROM arp_table where ip='".$var."'"  );

它与其他两个值一起使用,因为它们被解释为整数或浮点数据类型

于 2013-09-04T12:17:54.537 回答