-1

这似乎是一个简单的错误,但我完全被卡住了。这是代码:

 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 子句'中的未知列'this is the searchterm'

4

2 回答 2

2

这是您当前的查询,

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

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

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

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

于 2013-04-03T14:27:28.267 回答
0

首先,您将自己暴露在SQL 注入中。在做任何其他事情之前,您需要了解这一点。PDO 库使它变得非常简单和安全。

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

SELECT scinameFROM wp_birdsWHERE this is the searchterm = 'comname'

您正在寻找的是以下内容(注意引号):

SELECT scinameFROM wp_birdsWHERE comname = '这是搜索词'

但是你不应该那样做,因为你仍然暴露在 SQL 注入中。

于 2013-04-03T14:30:56.390 回答