請原諒這篇較長的文章 - 儘量儘可能簡潔,儘可能多地提供詳細信息...而且我歷來是一個程序PHP程序員,現在讓我的腳溼對象。存儲一個對象到數據庫,然後再次檢索它
我正在使用第三方類(通過phar加載)從聯機服務器捕獲流的測試項目。在線服務器發佈事件,我捕獲(使用「capture.php」)每個事件與第三方類,序列化數據,然後將其作爲BLOB字段存儲到MySQL數據庫。
//capture.php
// include phar file
require_once 'PAMI-1.72.phar';
// set include path to have pami's phar first
ini_set('include_path', implode(PATH_SEPARATOR, array('phar://pami.phar', ini_get('include_path'))));
use PAMI\Client\Impl\ClientImpl as PamiClient;
use PAMI\Message\Event\EventMessage;
use PAMI\Listener\IEventListener;
$pamiClient = new PamiClient($pamiClientOptions);
// Open the connection
$pamiClient->open();
$pamiClient->registerEventListener(function (EventMessage $event) {
// Following line dumps the event to a text file in rawCapture.php
//var_dump($event);
$mysqli = new mysqli($server, $user, $pass, $db);
if ($mysqli->connect_error) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
exit;
}
$serializedData = $mysqli->real_escape_string(serialize($event));
$sql = 'insert into obj (data) values ("' . $serializedData . '")';
echo "\r\nSQL is $sql\r\n";
});
在不同的腳本(「read.php」 - 我知道 - 我是非常有創意的腳本命名)我保證我有包含文件的類定義文件,拿起的第一項數據庫,拉BLOB數據,然後反序列化它。在這一點上,我在read.php測試變量類型和變量是一個對象:
require_once 'PAMI-1.72.phar';
// set include path to have pami's phar first
ini_set('include_path', implode(PATH_SEPARATOR, array('phar://pami.phar', ini_get('include_path'))));
use PAMI\Client\Impl\ClientImpl as PamiClient;
use PAMI\Message\Event\EventMessage;
use PAMI\Listener\IEventListener;
/* All the MySQL stuff to get the $data from the db */
$event = unserialize($data);
echo "\r\nevent is " . gettype($event) . "\r\n";
print_r($event);
這是結果我得到:
event is object
PAMI\Message\Event\NewchannelEvent Object
(
[rawContent:protected] => Event: Newchannel
Privilege: call,all
Channel: Local/[email protected];2
ChannelState: 4
ChannelStateDesc: Ring
CallerIDNum:
CallerIDName:
AccountCode:
Exten: s
Context: tc-maint
Uniqueid: 1443368640.57856
[lines:protected] => Array
(
)
[variables:protected] => Array
(
)
[keys:protected] => Array
(
[event] => Newchannel
[privilege] => call,all
[channel] => Local/[email protected];2
[channelstate] => 4
[channelstatedesc] => Ring
[calleridnum] =>
[calleridname] =>
[accountcode] =>
[exten] => s
[context] => tc-maint
[uniqueid] => 1443368640.57856
)
[createdDate:protected] => 1443368636
)
好 - 到目前爲止好,恕我直言。這肯定是一個對象,所有的數據當然似乎已經被正確存儲(rawCapture.php是另一個腳本,它也輪詢數據,並且var_dumps 相同的事件到一個文本文件,以便我可以「比較」並確保一切正確記錄)。
但是,現在我想處理一些對象數據,這是我遇到的問題。例如,我試圖獲得Uniqueid的值,但使用$id = $event->Uniqueid;
我得到以下錯誤PHP Notice: Undefined property: PAMI\Message\Event\NewchannelEvent::$Uniqueid in /home/dave/objRead.php on line 69
現在我卡住了。我試着檢查$事件實際上是一個對象,使用get_object_vars():
$objVars = get_object_vars($event);
if(is_null($objVars)){
echo "\r\nobjVars doesn't appear to be an object?!\r\n";
} else {
if(is_array($objVars)){
print_r($objVars);
} else {
echo "\r\nobjVars isn't an array!!\r\n";
}
}
,我讓我自己的錯誤代碼「objVars不會出現是一個對象?」。
任何人都可以給我一些關於我在做什麼的建議是錯誤的?
另外 - 我試圖保留在上面的代碼部分indentation,但它不會讓我發佈而不刪除它們。我也修改了我的OP,以表明我包含第三方代碼,以便加載類定義,並且我使用來自MySQL表的數據unserialize
。
'PHP公告:未定義的屬性:PAMI \信息\事件\ NewchannelEvent :: $ UNIQUEID在/home/dave/objRead.php線54' 我曾用首字母大寫的變量,因爲我非常瞭解區分大小寫,這就是我使用'print_r($ event)'時所列出的內容,但是我採納了您的建議並獲得了幾乎相同的響應,即使嘗試調用小寫字母... – bnoeafk
道歉,諾言,但我確實相信我確實回答了卡洛斯的問題。 「...我採納了你的建議,得到了...相同的迴應」 我在這裏錯過了什麼嗎?我不是故意冒犯...... – bnoeafk