2012-07-15 110 views
0

我试图比较两个表单中的$ _GET输入,并将它们添加到SQL语句中,如果它发现数据库中的某些内容。这是SQL代码。

<?php 
    include('db_connect.php'); 

    $name1 = $_GET['name1']; 
    $name2 = $_GET['name2']; 


    $query="SELECT * FROM Stats WHERE `Name` LIKE '$_GET[name1]%' OR '$_GET[name2]%' "; 
    $res=mysql_query($query); 
    $num=mysql_numrows($res); 
    $i=0; 

    while($i< $num){ 
    $Name = mysql_result($res, $i, "Name"); 
    echo $Name; 
    $i++; 
    } 
?> 

这适用于第一$ _GET [名称1]字段,但是我想回更多,如果NAME2也匹配。任何想法将不胜感激。

+0

这对SQL注入是开放的。使用'mysql_real_escape_string'来避免注入和黑客攻击。 – 2012-07-15 21:33:46

+1

调查PDO并准备报表。避免繁琐和繁琐的手动转义和日期mysql_ *接口。 – mario 2012-07-15 22:24:10

回答

2

尝试在连接字符串:

$query="SELECT * FROM Stats WHERE `Name` LIKE '".mysql_real_escape_string($_GET["name1"])."%' OR `Name` LIKE '".mysql_real_escape_string($_GET["name2"])."%';"; 

您还需要LIKE - 运算符,当您使用OR。 也许这也是一个问题,功能mysql_numrows()正是所谓的mysql_num_rows()

+0

我还使用此代码获得第二个值2。 – jsheffers 2012-07-15 21:41:42

+0

好吧,它看起来像它的工作,但我猜数据库中的两行具有相同的值。现在我正在寻找名字,我还能怎么做。他们是团队的一部分... – jsheffers 2012-07-15 21:44:38

+0

如果mysql-table中的两个条目以$ _GET [“name2”]开头,那么这是可能的。如果你只想要一个值,你可以使用'LIMIT 0,1'。 – 2012-07-15 21:45:05

2

你的第二个LIKE需要引用正确的列:

$query="SELECT * FROM Stats 
      WHERE `Name` LIKE '$_GET[name1]%' OR `Name` LIKE '$_GET[name2]%'"; 
+0

我实际上使用此代码获得第二个值两次。 – jsheffers 2012-07-15 21:40:19

+0

否 - 您没有从数据库获取第二个值,您获得的行与数据库中的第二个值匹配 - 并且使用您提供的查询作为nickb的参数,您将不会获得重复行。回去看看你的数据。 – symcbean 2012-07-15 21:58:03

相关问题