0
$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 に結果セットを保存できません サブクエリが複数の行を返します

データベースから値を取得するのを手伝ってくれる人はいますか...

4

4 に答える 4

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'

SQL Injection補足として、値が外部から取得された場合クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用PreparedStatementsすると、値を一重引用符で囲む必要がなくなります。

于 2013-01-14T22:35:25.287 に答える
0

place_id in のような IN 演算子を使用します (ここでサブクエリ)

  $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());
于 2013-01-14T22:36:20.763 に答える
0

他の答えは賢明です。クエリをネストするよりもうまくいく可能性があります。

本当にやりたい場合はAND my_column_id = (SELECT something FROM ...) 、サブクエリが 1 行だけを返すようにしLIMIT 0, 1ます。

于 2013-01-14T22:44:39.310 に答える
0

代わりにmysqli_or関数を使用する準備済みステートメントを使用してください。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'
于 2013-01-14T22:35:10.863 に答える