拿搜索词,在数据库中检查它,返回匹配词MySQL php

时间:2013-04-03 14:23:49

标签: php mysql sql

这似乎是一个简单的错误,但我完全陷入困境。这是代码:

 if (!empty ($_POST['searchbird'])){
        $searchbird=rawurlencode(trim($_POST['searchbird']));
        $result = mysql_query("SELECT `sciname` FROM `wp_birds` WHERE $searchbird = `comname`");
    if (!$result) {
        echo 'Could not run query: ' . mysql_error();
        exit;
    }
    $searchterm = mysql_fetch_row($result);

SQL数据库设置Col 4是comname,col 5是sciname

这是错误 无法运行查询:'where子句'

中的未知列'这是searchterm'

2 个答案:

答案 0 :(得分:2)

这是您当前的查询,

SELECT `sciname` FROM `wp_birds` WHERE $searchbird = `comname`

如果comName的数据类型是字符串,则该值应该用单引号括起来,因为它们是文字。

SELECT `sciname` FROM `wp_birds` WHERE  `comname` = '$searchbird' 

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:0)

首先,您将自己暴露给SQL injection 。在做任何其他事情之前,您需要涵盖这一点。 PDO library使其变得非常简单和安全。

关于您的问题,最终查询如下:

  

SELECT sciname FROM wp_birds这是searchterm ='comname'

您要找的是以下内容(注意引号):

  

SELECT sciname FROM wp_birds WHERE comname ='这是searchterm'

但你不应该这样做,因为你仍然接触到SQL注入。