0

我遇到了奇怪的麻烦

我有这个结果

{"Result":{"id":"1010","venueId":"29","type":"1004","name":"Bacardi"}}

带代码

$statement = $conn->prepare('SELECT * FROM spirits WHERE venueId = :venueId');
            $statement->bindParam(':venueId' , $venueId, PDO::PARAM_INT);
            $statement->execute();

            $row = $statement->fetchAll(PDO::FETCH_ASSOC);
            $spirits = $row;
            $spirit = $spirits[0];
            return json_encode(array('Result'=>$spirit));

现在的问题是

当我尝试做的时候$drinkId = $spirit->id;它返回null ..有什么问题?

var_dump($row[0]);

array(4) { ["id"]=> string(4) "1010" ["venueId"]=> string(2) "29" ["type"]=> string(4) "1004" ["name"]=> string(7) "Bacardi" } 
4

2 回答 2

2

也许是因为你使用FETCH_ASSOC,因此调用应该是

$drinkId = $spirit['id'];

改用FETCH_OBJ_

于 2013-10-27T08:29:42.220 回答
0

在最简单的解释中,问题在于您将数据库结果作为关联数组 ( PDO::FETCH_ASSOC) 获取。如果要使用对象运算符访问行数据,则需要将结果作为对象或特定类获取。

在不修改代码的情况下,要访问第一个返回行的 ID,您可以:

$statement = $conn->prepare('SELECT * FROM spirits WHERE venueId = :venueId');
$statement->bindParam(':venueId' , $venueId, PDO::PARAM_INT);
$statement->execute();

$row = $statement->fetchAll(PDO::FETCH_ASSOC);
$spirit = $row[0];
$drinkId = $spirit['id'];

或者您可以获取一个实例stdClass并使用对象运算符,如下所示:

$statement = $conn->prepare('SELECT * FROM spirits WHERE venueId = :venueId');
$statement->bindParam(':venueId' , $venueId, PDO::PARAM_INT);
$statement->execute();

$row = $statement->fetchAll(PDO::FETCH_OBJ);
$spirit = $row[0];
$drinkId = $spirit->id;
于 2013-10-27T08:32:14.603 回答