[英]Zend Framework 2 logging to MySQL DB additional columns inserting null
我下面的代碼部分正在努力從Paypal事務寫入MySQL數據庫。 我只包含了相關的Zend DB日志部分,根據數據輸出,Paypal界面運行良好。
$paypalLog = array(
'transactionId' => 'transactionId',
'transactionType' => 'transactionType',
'paymentType' => 'paymentType',
'orderTime' => 'orderTime',
'amt' => 'amt',
'currencyCode' => 'currencyCode',
'feeAmt' => 'feeAmt',
'taxAmt' => 'taxAmt',
'paymentStatus' => 'paymentStatus',
'pendingReason' => 'pendingReason',
'reasonCode' => 'reasonCode'
);
$data = array(
'transactionId' => $transactionId,
'transactionType' => $transactionType,
'paymentType' => $paymentType,
'orderTime' => $orderTime,
'amt' => $amt,
'currencyCode' => $currencyCode,
'feeAmt' => $feeAmt,
'taxAmt' => $taxAmt,
'paymentStatus' => $paymentStatus,
'pendingReason' => $pendingReason,
'reasonCode' => $reasonCode
);
$mapping = array(
'message' => 'message',
'extra' => $data);
print_r($mapping);
$writer = new Zend\Log\Writer\Db($db, 'paypal', $paypalLog);
$logger = new Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info($mapping);
當我運行我的代碼時,打印返回以下內容,因此數據可用
Array ( [message] => message [extra] => Array ( [transactionId] => 03V084280U905161H [transactionType] => expresscheckout [paymentType] => instant [orderTime] => 2013-02-12T01:16:40Z [amt] => 9.00 [currencyCode] => AUD [feeAmt] => 0.52 [taxAmt] => 0.00 [paymentStatus] => Completed [pendingReason] => None [reasonCode] => None ) )
我的表定義如下,並且已授予用戶完全權限。
CREATE TABLE `paypal` (
`timestamp` varchar(45) DEFAULT NULL,
`priority` varchar(45) DEFAULT NULL,
`priorityName` varchar(45) DEFAULT NULL,
`message` varchar(45) DEFAULT NULL,
`transactionId` varchar(45) NOT NULL,
`transactionType` varchar(45) DEFAULT NULL,
`paymentType` varchar(45) DEFAULT NULL,
`orderTime` datetime DEFAULT NULL,
`amt` varchar(45) DEFAULT NULL,
`currencyCode` varchar(45) DEFAULT NULL,
`feeAmt` varchar(45) DEFAULT NULL,
`taxAmt` varchar(45) DEFAULT NULL,
`paymentStatus` varchar(45) DEFAULT NULL,
`pendingReason` varchar(45) DEFAULT NULL,
`reasonCode` varchar(45) DEFAULT NULL,
PRIMARY KEY (`transactionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
但是,當我在MySQL方面運行跟蹤時,它只會繼續嘗試插入空值。
130212 12:19:38 29 Connect user@localhost on database
29 Query INSERT INTO `paypal` () VALUES ()
29 Quit
任何想法歡迎!
感謝cathulhu的投入,非常感謝,我在下面完成了這項工作
// Array of db columns
$paypalLog = array('transactionId' => 'transactionId',
'transactionType' => 'transactionType',
'paymentType' => 'paymentType',
'orderTime' => 'orderTime',
'amt' => 'amt',
'currencyCode' => 'currencyCode',
'feeAmt' => 'feeAmt',
'taxAmt' => 'taxAmt',
'paymentStatus' => 'paymentStatus',
'pendingReason' => 'pendingReason',
'reasonCode' => 'reasonCode'
);
// Map data into array matching column names
$data = array(
'transactionId' => $transactionId,
'transactionType' => $transactionType,
'paymentType' => $paymentType,
'orderTime' => $orderTime,
'amt' => $amt,
'currencyCode' => $currencyCode,
'feeAmt' => $feeAmt,
'taxAmt' => $taxAmt,
'paymentStatus' => $paymentStatus,
'pendingReason' => $pendingReason,
'reasonCode' => $reasonCode
);
// Array to construct the DB logger table structure with extra columns
$mapping = array(
'timestamp' => 'timestamp',
'priority' => 'priority',
'priorityName' => 'priorityName',
'message' => 'message',
'extra' => $paypalLog);
// Array to log actual data
$mylog = array(
'message' => 'some msg',
'extra' => $data);
// Configure the write/logger and specify the array members to log
$writer = new Zend\Log\Writer\Db($db, 'paypal', $mapping);
$logger = new Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info($mylog['message'], $mylog['extra']);
我現在從MySQL一般日志中看到此輸出
Connect user@localhost on database
54 Query INSERT INTO `paypal` (`timestamp`,`priority`,`priorityName`,`message`,`transactionId`,`transactionType`,`paymentType`,`orderTime`,`amt`,`currencyCode`,`feeAmt`,`taxAmt`,`paymentStatus`,`pendingReason`,`reasonCode`) VALUES ('2013-02-15T07:52:52+01:00','6','INFO','My log message','88L4229675348363C','expresscheckout','instant','2013-02-15T06:52:58Z','9.00','AUD','0.52','0.00','Completed','None','None')
54 Quit
嘗試替換此行:
$logger->info($mapping);
與:
$logger->info($mapping['message'], $mapping['extra']);
Zend / Logger的info方法期望接收兩個單獨的參數。
編輯:
進一步查看您的代碼,我看到了另一個問題。 列圖只是一種原型。 您真正想要記錄的是您的數據和一些記錄消息,對嗎?
$mapping = array(
'message' => 'message',
'extra' => $paypalLog); // Not $data !
$mylog = array(
'message' => 'My log message',
'extra' => $data);
接着:
$writer = new \Zend\Log\Writer\Db($db, 'paypal', $mapping); // Writer needs mapping info, not data :-)
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info($mylog['message'], $mylog['extra']); // ...and your log record goes here, to logger instance
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.