【问题标题】:Getting list of all users from Database using php PDO使用 php PDO 从数据库中获取所有用户的列表
【发布时间】:2013-01-04 10:19:55
【问题描述】:

我正在尝试从数据库中获取具有特定纬度和经度范围的玩家列表。查询工作正常并给我结果。然而,这些结果可能包括不止一名玩家。如下所示的当前代码只给了我一个 JSON 编码的玩家。我怎样才能让所有玩家 JSON ENCODED。

function GetPlayersInRange() 
    {
        try {
            $conn = $this->GetDBConnection();

            $long1 = trim($_REQUEST['long1']);
            $long2 = trim($_REQUEST['long2']);
            $lat1  = trim($_REQUEST['lat1']);
            $lat2  = trim($_REQUEST['lat2']);


            $statement = $conn->prepare('SELECT * FROM players WHERE longitude > :long1 AND longitude < :long2 AND latitude > :lat1 AND latitude < :lat2');
            $statement->bindParam(':long1', $long1, PDO::PARAM_STR);
            $statement->bindParam(':long2', $long2, PDO::PARAM_STR);
            $statement->bindParam(':lat1' , $lat1, PDO::PARAM_STR);
            $statement->bindParam(':lat2' , $lat2, PDO::PARAM_STR);
            $statement->execute();

            if(!($row = $statement->fetch(PDO::FETCH_ASSOC))) 
            {
                return "No Players";
            }

            $conn = null;
        } catch(PDOException $e) {
            throw $e;
        }

        return $row;
    }

【问题讨论】:

    标签: php json pdo


    【解决方案1】:

    $statement-&gt;fetch 更改为$statement-&gt;fetchAllFetch 只会“从结果集中获取下一行”,而 fetchAll 将“返回包含所有结果集行的数组”。

    【讨论】:

    • 谢谢你这样做。我想我必须对 FETCH_ASSOC 做一些改变
    【解决方案2】:

    您不应该在查询中将字符串与 int/double 进行比较。使用 PDO::PARAM_STR 时,它会将您的数据用单引号括起来。尝试在此处使用 PDO::PARAM_INT。

    【讨论】:

    • 无论如何 - 你将如何比较字符串与 ">"?
    • 有趣的是,即使使用 PARAM_STR,它也在进行精确搜索。我已将其更改为 INT,无论哪种方式都可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2015-08-28
    • 1970-01-01
    • 2013-01-27
    • 2014-02-25
    • 2021-11-16
    相关资源
    最近更新 更多