“where子句”中的未知列'Amsterdam'

时间:2014-02-14 16:06:48

标签: php mysql

我想在数据库中显示tableA中的某些数据,但只显示与tableB中用户位置相似的位置的数据。

我正在使用下面的代码,但是我收到以下错误:'where子句'中的未知列'Amsterdam'。

我使用的代码是:

     $query = 'SELECT * FROM tableA WHERE `city` LIKE '.$user['city'].' ORDER BY `id` DESC';
     $result = mysql_query($query, $conn) or die(mysql_error());
     $row_result = mysql_fetch_assoc($result);


     echo $row_result['name'];

您认为错误是什么?

4 个答案:

答案 0 :(得分:2)

您需要将$user['city']的值与单引号连接起来。 假设这个城市是阿姆斯特丹,你的目标是一个SQL语句:

SELECT * FROM tableA WHERE `city` LIKE 'Amsterdam' ORDER BY `id` DESC

但你所产生的是:

SELECT * FROM tableA WHERE `city` LIKE Amsterdam ORDER BY `id` DESC

所以MySQL将城市的名称视为表格列,因为它没有被封闭。 您的代码必须是:

$query = "SELECT * FROM tableA WHERE `city` LIKE '".$user['city']."' ORDER BY `id` DESC";
$result = mysql_query($query, $conn) or die(mysql_error());
$row_result = mysql_fetch_assoc($result);

echo $row_result['name'];

上面的示例使用双引号括起静态文本,但您可以通过转义需要形成字符串值的单引号来使用单引号:

$query = 'SELECT * FROM tableA WHERE `city` LIKE \''.$user['city'].'\' ORDER BY `id` DESC';

答案 1 :(得分:1)

city是一个文本字段。因此,SQL解析器需要文本,必须使用引号。

"' $用户['城市']'"

答案 2 :(得分:1)

您可能希望在$ user ['city']附近添加其他引号,如下所示:

$query = 'SELECT * FROM tableA WHERE `city` LIKE `'.$user['city'].'` ORDER BY `id` DESC';

答案 3 :(得分:0)

正如其他人所说,你错过了$user['city']

周围的引号

除此之外,我是否可以建议您停止使用已被弃用的mysql_功能。

如果你转到mysqli_PDO::来电,你就可以开始使用准备好的陈述,这会让生活变得更轻松,实际上可能让你有理由去思考“我是如何应对的没有这些?“