2015-09-27 100 views
1

請原諒這篇較長的文章 - 儘量儘可能簡潔,儘可能多地提供詳細信息...而且我歷來是一個程序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

回答

0

您是否嘗試將$id = $event->Uniqueid;中的Uniqueid更改爲小寫?
因此,這將是$id = $event->uniqueid;

+0

'PHP公告:未定義的屬性:PAMI \信息\事件\ NewchannelEvent :: $ UNIQUEID在/home/dave/objRead.php線54' 我曾用首字母大寫的變量,因爲我非常瞭解區分大小寫,這就是我使用'print_r($ event)'時所列出的內容,但是我採納了您的建議並獲得了幾乎相同的響應,即使嘗試調用小寫字母... – bnoeafk

+0

道歉,諾言,但我確實相信我確實回答了卡洛斯的問題。 「...我採納了你的建議,得到了...相同的迴應」 我在這裏錯過了什麼嗎?我不是故意冒犯...... – bnoeafk

相關問題