PHP 空值,同时尝试获取行的 ID


PHP null while trying to get id of the row

>我遇到了奇怪的麻烦

我有这个结果

{"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时;它返回空值。怎么了?

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

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

$drinkId = $spirit['id'];

改用FETCH_OBJ尝试

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

在不修改代码的情况下,要访问第一个返回行的 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;