2012-03-16 6 views
0

mysql文で変数を使用しようとしているため、入力に応じて変数が変更されます。たとえば、ユーザーがサイズを入力しない場合、ステートメントのその部分は表示されません。申し訳ありませんが説明に悪いです。しかし、以下のコードを実行するとエラーが発生しますが、 '動的な' ANDステートメントを削除するとコードが機能します。私は何が間違っているのか分かりません。そしてアイデア。mysqlクエリでどのように変数を使用するのですか?

 if($size2 ==''){ 
    $size_stat = ''; 
    }else{ 
    $size_stat = "AND size='$size2'"; 

    } 

    if($re2 ==''){ 
    $re_stat = ''; 
    }else{ 
    $re_stat = "AND re='$re2'"; 

    } 


    if($status2 ==''){ 
    $status_stat = ''; 
    }else{ 
    $status_stat = "AND status='$status2' "; 

    } 


    $result2 = mysql_query("SELECT 
     lat,lng,id,re,re_num,name,city,state,zip,address,status,category,size, 
     (3959 * acos(cos(radians($lat2)) 
        * cos(radians(lat)) 
        * cos(radians(lng) - radians($long2)) 
        + sin(radians($lat2)) 
        * sin(radians(lat)) 
        ) 
    ) AS distance 
    FROM 
     locations 
    WHERE 
     (state='PA' OR state='NY') 
    .$re_stat. 
    $size_stat. 
    $status_stat. 
    HAVING 
     distance < 300 
    ORDER BY 
     distance 
    LIMIT 
     0 , 50 "); 

    while($array = mysql_fetch_assoc($result2)){ 


    $array_json[] = $array; 
    } 


    echo json_encode($array_json); 
+0

推測でホワイタペックがありません。例えば$ status_stat = "AND status = '$ status2'"; –

答えて

3

ANDステートメントにはスペースの問題があります。

すべての* _stat変数は、文字列の先頭と末尾にスペースを追加して、sqlクエリが中断しないようにします。例えば

$size_stat = " AND size='$size2' "; 

また、あなたは "" と "HAVING" 節の間にスペースがあることを確認してください。

UPDATE:また、クエリで実際に結果が返されているかどうかを確認してください。

UPDATE2:ドットを '。'に置き換えます。スペースで検索しています...

+0

どういう意味ですか? –

+0

私はちょうどそれを試みたが、いずれもうまくいかなかった –

+0

すべての* _stat変数に? – zaf

関連する問題