我无法从数据库中检索值

时间:2013-01-14 22:32:59

标签: php mysql sql database

$raw_results=mysql_query("SELECT resort_name FROM resorts WHERE resort_id=(SELECT resort_id FROM resort_place WHERE place_id=(SELECT place_id FROM place WHERE place='$query')) ") or die(mysql_error());
$check_num_rows=mysql_num_rows($raw_results);
$solutions = array();
while($row = mysql_fetch_assoc($raw_results)) {
$solutions[] = $row['solution'];
}

这是我的代码,它会返回错误消息,如

  

警告:mysql_query()[function.mysql-query]:无法在第131行的C:\ xampp \ htdocs \ search \ news.php中保存结果集   子查询返回超过1行

任何人都可以帮我从数据库中检索值......

4 个答案:

答案 0 :(得分:1)

这会产生与多个子查询相同的结果。

SELECT  DISTINCT a.resort_name 
FROM    resorts a
        INNER JOIN resort_place b
            ON a.resort_id = b.resort_id
        INNER JOIN place c
            ON b.place_id = c.place_id
WHERE   c.place='$query'

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

答案 1 :(得分:0)

使用mysqli_PDO函数来使用预准备语句。您的查询可以使用明确的JOIN

来完成
SELECT DISTINCT resorts.resort_name
FROM resorts
JOIN resort_place ON resort_place.resort_id = resorts.resort_id
JOIN place ON place.place_id = resort_place.place_id
WHERE place.place = '$query'

答案 2 :(得分:0)

使用IN运算符,例如place_id(在此子查询中)

  $raw_results=mysql_query("SELECT resort_name FROM resorts WHERE resort_id IN 
       (SELECT resort_id FROM resort_place WHERE place_id IN 
            (SELECT place_id FROM place WHERE place='$query')
       ) 
  ") or die(mysql_error());

答案 3 :(得分:0)

其他答案是明智的,你可以比嵌套查询更好。

如果你真的想做AND my_column_id = (SELECT something FROM ...) 确保子查询只返回一行,可以用LIMIT 0, 1结束。