首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL WHERE子句的值错误

问MYSQL WHERE子句的值错误
EN

Stack Overflow用户
提问于 2011-02-16 03:44:37
回答 7查看 370关注 0票数 0

每当我尝试执行查询时,它都会给出一个unknown列错误,因为它使用我的变量作为列名。

本质上

代码语言:javascript
复制
$search="lname";
$term="asdas";

(这两个变量都来自另一个页面上的表单)

我运行以下代码:

代码语言:javascript
复制
if (isset($term))
    {
    $query = "SELECT * FROM test 
    WHERE $search = $term ";
    }
else
    {   
    $query = "SELECT * FROM test";
    }
echo $query;    
$result=mysql_query($query) or die(mysql_error());

然后我的错误是:where子句中的列'asdas‘未知

EN

回答 7

Stack Overflow用户

发布于 2011-02-16 03:47:03

您需要用单引号将搜索词括起来(也可以使用mysql_real_escape_string避免搜索字符串中的引号出现任何问题)。即:

代码语言:javascript
复制
if (isset($term))     
{     
    $query = "SELECT * FROM test WHERE $search = '" . mysql_real_escape_string($term) . "' ";     
}
票数 2
EN

Stack Overflow用户

发布于 2011-02-16 03:47:33

你需要引用它。

代码语言:javascript
复制
if (isset($term))
    {
    $query = "SELECT * FROM test 
    WHERE $search = '$term' ";
    }
else
    {   
    $query = "SELECT * FROM test";
    }
echo $query;    
$result=mysql_query($query) or die(mysql_error());

其他评论

如果驱动程序支持参数化查询,那么使用参数化查询总是更好。它将阻止SQL注入。现在,有人可以发送一个字符串"‘or ''='“,查询结果是

代码语言:javascript
复制
SELECT * FROM test WHERE col1 = '' or ''=''

这是一种非常温和但出乎意料的行为。如果字符串包含单引号,它还会中断查询(输入为“o‘’neil”)

代码语言:javascript
复制
SELECT * FROM test WHERE col1 = 'o'neil'   # << unmatched quotes

因此,如果您不能使用参数,则至少要使用mysql_real_escape_string。

代码语言:javascript
复制
    $query = "SELECT * FROM test 
    WHERE $search = '" . mysql_real_escape_string($term) . "' ";
票数 2
EN

Stack Overflow用户

发布于 2011-02-16 03:47:03

您需要引用您的$term参数:

代码语言:javascript
复制
// protect from trivial sql injection attacks.
$term = mysql_real_escape_string("adas");
$query = "SELECT * FROM test 
    WHERE $search = '$term'";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5008710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档