2016-07-09 8 views
0

Dies ist meine FunktionWie geografische Breite und Länge zu berechnen, basierend auf Abstand in Laravel

public function getRshow(){ 

    $lats = $tenl[0]->latitude; 
    $longs = $tlog[0]->longitude; 
    $distance =$par_dis[0]->partner_distance; 
    $project = "SELECT * , (3956 * 2 * ASIN(SQRT(POWER(SIN(($lats - latitude) * pi()/180/2), 2) +COS($lats * pi()/180) * COS(latitude * pi()/180) * POWER(SIN(( $longs - longitude) * pi()/180/2), 2)))) as distance 
    FROM `abserve_renterpost` having distance <= $distance order by distance"; 
    $la=DB::SELECT($project); 

    $lara=array(); 
    foreach ($project as $key => $v) { 
    $lara[]=(get_object_vars($v)); 
    } 
} 

Meine Abfrage funktioniert gut, wenn ich nur die Abfrage ausführen, aber wenn ich meine Abfrage für Wert und Array-Format konvertiert es ist nicht funktioniert, Fehler wird wie folgt angezeigt.

(SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' - latitude) * pi()/180/2), 2) +COS(27.7 * pi()/180) * COS(latitude * ' at line 1 (SQL: SELECT * , (3956 * 2 * ASIN(SQRT(POWER(SIN((27.7 - latitude) * pi()/180/2), 2) +COS(27.7 * pi()/180) * COS(latitude * pi()/180) * POWER(SIN((74.12399600000003 
- longitude) * pi()/180/2), 2)))) as distance 
FROM `abserve_renterpost` having distance <= 200 order by distance)) 
+0

Es sieht aus wie der Fehler in '$ lats' auf den Wert bezieht. Hast du 'intval ($ lats)' ausprobiert, um sicherzustellen, dass du keine Zeichenfolge verwendest? Versuchen Sie außerdem, Platzhalter ': lats' zu verwenden und binden Sie die Parameter nach dem Vorbereiten Ihrer Abfrage. – 1sloc

+0

ya Ich bin müde, aber es funktioniert nicht gleichen Fehler angezeigt. – murugesh

Antwort

1
  • Ich bemerkte $lats27.7 war die ungerade ist.

try this

$lats = $tenl[0]->latitude; 
$longs = $tlog[0]->longitude; 
$distance =$par_dis[0]->partner_distance; 
$project = <<<SQL 
    SELECT * , (3956 * 2 * ASIN(
     SQRT(
     POWER(SIN(($lats - `latitude`) * pi()/180/2), 2) 
     + COS($lats * pi()/180) 
      * COS(`latitude` * pi()/180) 
      * POWER(SIN(($longs - `longitude`) * pi()/180/2), 2) 
    )) 
    ) as 'distance' 

    FROM `abserve_renterpost` 
    WHERE distance <= $distance 
    ORDER BY distance; 
SQL; 
$la=DB::select($project); 

$lara=array(); 
foreach ($project as $key => $v) { 
    $lara[]=(get_object_vars($v)); 
} 
Verwandte Themen