簡體   English   中英

php-無法將PDOStatement類型的對象用作Google Cloud Messaging的數組

[英]php - Cannot use object of type PDOStatement as array with Google Cloud Messaging

我最近開始使用PDO編寫應用程序,目前正面臨一個問題,即我要從表中提取設備ID並將其發送到Firebase進行推送通知。 當我在頁面上執行時,使用下面的PHP腳本,我收到此錯誤

錯誤

Cannot use object of type PDOStatement as array in /Applications/XAMPP/xamppfiles/htdocs/myapp/send_fcm.php

的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);

PDO::query為成功的SELECT PDO::query返回一個PDOStatement對象。 讓我們更改該變量的名稱,因為$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM