php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #53336 queries on create_function return only one result
Submitted: 2010-11-18 06:19 UTC Modified: 2011-01-06 01:26 UTC
From: cbruner at quadro dot net Assigned:
Status: Not a bug Package: SQLite related
PHP Version: 5.3.3 OS: linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: cbruner at quadro dot net
New email:
PHP Version: OS:

 

 [2010-11-18 06:19 UTC] cbruner at quadro dot net
Description:
------------
Using sqlite3, create a function to do a comparison (SQLite3::createFunction)
Then query a table using the function. 
Only one result is returned when multiple results would be expected.

Test script:
---------------
// callback function for use by the sqlite3 class which returns the distance between 2 points on the earth
        function SqLDistance($Latitude,$Longitude,$Lat,$Long)
{
        $result = 10000.0;      // flag to be off the earth!
        if (isset($Latitude) &&  isset($Longitude))
        {
                $lat1rad = $Latitude *  0.01745327;// degrees * pi over 180
                $lat2rad = $Lat *  0.01745327;// degrees * pi over 180
                $long1rad = $Longitude *  0.01745327;// degrees * pi over 180
                $long2rad = $Long *  0.01745327;// degrees * pi over 180
                // apply the spherical law of cosines to our 
                $earthRadius = 6378.1;  //km
                $result =  $earthRadius *
                        acos(sin($lat1rad) * sin($lat2rad) + cos($lat1rad) * cos($lat2rad) * cos($long2rad - $long1rad));
        }
        return $result;
}

class MyDB extends SQLite3
{
        function __construct()
        {
                $this->open('zipcode.db');
                $this->createFunction('Distance','SqlDistance',4);
        }


     function Borked($lat,$long,$count)
        {
        $result = $this->query("Select *,Distance(Lat,Long,$lat,$long) as Distance from agents order by Distance Limit 0,$count");
        return $result->fetchArray();
        }
}



Expected result:
----------------
An array of results with a length greater then 1.


Actual result:
--------------
An array of result.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-01-06 01:13 UTC] scottmac@php.net
Can you give me a full test script, I'll need data too to track this down.
 [2011-01-06 01:18 UTC] scottmac@php.net
-Status: Open +Status: Bogus
 [2011-01-06 01:18 UTC] scottmac@php.net
Actually you only return one row. fetchArray() only fetches the first result since 
SQLite isn't buffered.

You need to loop and call fetchArray() multiple times.
 [2011-01-06 01:26 UTC] cbruner at quadro dot net
This bug is a month old for me now, and I can't remember if I tried fetcharray or 
not. 
Let's mark it bogus and leave it at that.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Fri May 09 13:01:28 2025 UTC