PHP在尝试获取行的id时为null

PHP在尝试获取行的id时为null,php,Php,我有奇怪的麻烦 我有这个结果 {"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);

我有奇怪的麻烦

我有这个结果

{"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" } 

也许是因为你使用了,所以电话应该是

$drinkId = $spirit['id'];

尝试使用
FETCH_OBJ
取而代之

在最简单的解释中,问题是您将数据库结果作为关联数组(
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
的实例并使用object操作符,如下所示:

$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;

您是否尝试过基本调试,例如
var_dump($row[0])?$spirit结果如上所述,$row或$spirit不为Null否其不为json编码。我稍后会对它进行编码。请检查var_转储的结果