php-无法将PDOStatement类型的对象用作Google Cloud Messaging的数组

时间:2018-09-05 22:02:50

标签: php

我最近开始使用PDO编写应用程序,目前正面临一个问题,即我要从表中提取设备ID并将其发送到Firebase进行推送通知。 使用我下面的php脚本,当我在页面上执行时,出现此错误

错误

$row = $conn->query("SELECT device_id,os_type from devices");
while($row->setFetchMode(PDO::FETCH_ASSOC)) {
    $gcmRegIds = array();
    array_push($gcmRegIds, $row['device_id']);
    echo json_encode($gcmRegIds);
}

$url = "https://fcm.googleapis.com/fcm/send";
$token = $gcmRegIds;
$serverKey = 'API_KEY';
$title = "Title";
$body = "Body of the message";
$notification = array('title' =>$title , 'text' => $body, 'sound' =>'default');
$arrayToSend = array('to' => $token, 'notification' =>$notification,'priority'=>'high','badge'=>'1');
$json = json_encode($arrayToSend);

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: key='. $serverKey;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
//Send the request
$response = curl_exec($ch);
//Close request
if ($response === FALSE) {
    die('FCM Send Error: ' . curl_error($ch));
}
curl_close($ch);

PHP

mini-racer

1 个答案:

答案 0 :(得分:2)

PDO::query返回PDOStatement对象,以成功执行SELECT查询。让我们更改该变量的名称,因为$row在那里有点误导。

$stmt = $conn->query("SELECT device_id,os_type from devices");

现在,当您从中获取数据时,您可以获取行。 setFetchMode()不会获取行,因此我们仅将fetch()PDO::FETCH_ASSOC常量一起使用,定义其中的获取模式。

假设您希望数组中的所有device_id值都需要在循环之前移动数组初始化($gcmRegIds = array();),或者在将每个值推入数组之前将其设置回空数组并仅以最后一个值结束。另外,实际上array_push函数不是必须将一项附加到数组。您可以只使用[]

$gcmRegIds = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $gcmRegIds[] = $row['device_id'];
}

不要在循环内json_encode,以后再做,否则您将重复无效的JSON。

echo json_encode($gcmRegIds);