1

My sql statement returns null after using DB Raw.No data is produced after passing the request to postman

$current_lat = $request->latitude;
$current_lng = $request->longitude;
$car_type = $request->car_type;

$raw = DB::Raw("(3956 * 2 * ASIN(SQRT(POWER(SIN(('.$current_lat.' - artisans.driver_lat)
     * pi()/180 / 2), 2)+ COS('.$current_lat.' * pi()/180 ) 
     * COS(artisans.driver_lat * pi()/180)
     * POWER(SIN(('.$current_lng.' - artisans.driver_lng) 
     * pi()/180 / 2), 2) )))");

return json_encode($raw);

The results is: {}

When I try querying directly in the database, it returns an output as:

4
0.03677850072504271
6.6701784633102145
-1.562010571360574
Hafez Divandari
  • 8,381
  • 4
  • 46
  • 63
rea spider
  • 11
  • 4

2 Answers2

0

Try DB::select like this:

$results = DB::select('select (3956 * 2 * ASIN(SQRT(POWER(SIN((? - artisans.driver_lat)
 * pi()/180 / 2), 2)+ COS(? * pi()/180 ) 
 * COS(artisans.driver_lat * pi()/180)
 * POWER(SIN((? - artisans.driver_lng) 
 * pi()/180 / 2), 2) ))) from artisans', [$current_lat, $current_lat, $current_lng]);

This also provides protection against SQL injection. Check Laravel docs for more info.

Hafez Divandari
  • 8,381
  • 4
  • 46
  • 63
  • 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 ':$current_lat * pi()/180 ) – rea spider Jan 15 '20 at 15:06
  • @reaspider typo fixed, try again. – Hafez Divandari Jan 15 '20 at 15:07
  • Invalid parameter number (SQL: select (3956 * 2 * ASIN(SQRT(POWER(SIN((:current_lat - artisans.driver_lat)\n * pi()/180 / 2), 2)+ COS(:current_lat * pi()/180 ) \n * COS(artisans.driver_lat * pi()/180)\n * POWER(SIN((:current_lng - artisans.driver_lng) \n * pi()/180 / 2), 2) ))) from artisans)" – rea spider Jan 15 '20 at 15:09
  • DB::select(" select (3956 * 2 * ASIN(SQRT(POWER(SIN(($current_lat - artisans.driver_lat) * pi()/180 / 2), 2)+ COS($current_lat * pi()/180 ) * COS(artisans.driver_lat * pi()/180) * POWER(SIN(($current_lng - artisans.driver_lng) * pi()/180 / 2), 2) ))) from artisans"); – svikramjeet Aug 31 '21 at 10:34
0

I think it should look like this

DB::table('artisans')
    ->select(DB::Raw("your raw"))
    ->get();
sumnx
  • 81
  • 6