每当我尝试执行查询时,它都会给出一个unknown列错误,因为它使用我的变量作为列名。
本质上
$search="lname";
$term="asdas";(这两个变量都来自另一个页面上的表单)
我运行以下代码:
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‘未知
发布于 2011-02-16 03:47:03
您需要用单引号将搜索词括起来(也可以使用mysql_real_escape_string避免搜索字符串中的引号出现任何问题)。即:
if (isset($term))
{
$query = "SELECT * FROM test WHERE $search = '" . mysql_real_escape_string($term) . "' ";
}发布于 2011-02-16 03:47:33
你需要引用它。
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 ''='“,查询结果是
SELECT * FROM test WHERE col1 = '' or ''=''这是一种非常温和但出乎意料的行为。如果字符串包含单引号,它还会中断查询(输入为“o‘’neil”)
SELECT * FROM test WHERE col1 = 'o'neil' # << unmatched quotes因此,如果您不能使用参数,则至少要使用mysql_real_escape_string。
$query = "SELECT * FROM test
WHERE $search = '" . mysql_real_escape_string($term) . "' ";发布于 2011-02-16 03:47:03
您需要引用您的$term参数:
// protect from trivial sql injection attacks.
$term = mysql_real_escape_string("adas");
$query = "SELECT * FROM test
WHERE $search = '$term'";https://stackoverflow.com/questions/5008710
复制相似问题