PHP:尝试将Twilio响应JSON插入MySQL TEXT字段,但字符串可能被截断,可能在插入之前

问题描述 投票:0回答:1

本地主机上的Wordpress 5.3.2和PHP 7.2。

我正在发送Twilio短信,并捕获来自Twilio的响应,它是JSON。

我想存储响应,因为其中包含各种各样的好东西,例如发送日期-时间戳记。

[当我创建一个测试文件,并使用print_r响应时,它是一个相当大的JSON对象。不知道我是否应该以11,568个字符发布在这里。这是部分输出(Acct值已稍作更改):

Twilio\Rest\Api\V2010\Account\MessageInstance Object
(
    [_media:protected] => 
    [_feedback:protected] => 
    [version:protected] => Twilio\Rest\Api\V2010 Object
        (
            [_accounts:protected] => 
            [_account:protected] => Twilio\Rest\Api\V2010\AccountContext Object
                (
                    [_addresses:protected] => 
                    [_applications:protected] => 
                    [_authorizedConnectApps:protected] => 
                    [_availablePhoneNumbers:protected] => 
                    [_calls:protected] => 
                    [_conferences:protected] => 
                    [_connectApps:protected] => 
                    [_incomingPhoneNumbers:protected] => 
                    [_keys:protected] => 
                    [_messages:protected] => Twilio\Rest\Api\V2010\Account\MessageList Object
                        (
                            [version:protected] => Twilio\Rest\Api\V2010 Object
 *RECURSION*
                            [solution:protected] => Array
                                (
                                    [accountSid] => AC3365f6c6dddaac48edfb902a3e1b8688d
                                )

                            [uri:protected] => /Accounts/AC3365f6c6dddaac48edfb902a3e1b8688d/Messages.json
                        )

                    [_newKeys:protected] => 
(etc., etc...)

我的测试代码如下:

$data['numbers'] = array( "9541234567");// phone numbers of sms recipients. Just one for now.
$count = array();
for($i=0;$i<count($data['numbers']);$i++){
    $args = array(
                    'number_to' => $data['numbers'][$i],
                    'message'   => "This is a test.\n",
                 );
    $sent = twl_send_sms( $args );
    echo "<pre>";
    print_r($sent);//This line outputs that beautiful, robust JSON string I am after.
    echo "</pre>";
}

...到目前为止,太好了。 Twilio短信发送,并且Twilio给了我一个JSON格式的不错的大型响应。

现在,我将代码传输到更大的生产环境中,我想捕获该11568个字符的JSON对象,并将其存储在表中(通过更新)。我认为它应该是TEXT类型,可能是正确的。

这是我对生产进行的稍微修改的代码:

        $data['twilio_response'] = twl_send_sms( $args ); //This sends the sms, captures a Twilio response into an array element.
        $table = $wpdb->prefix . "npf_notifications";
        $data['notification-update'] = $wpdb->update(
                                                      $table, 
                                                      array('twilio_response' => $data['twilio_response']), 
                                                      array('id' => $data['notifications-insert']['id']), 
                                                      array('%s'),
                                                      array('%s')
                                                     );
        $data['notification-update-query'] = $wpdb->last_query; // this records the query in an array element, so I can examine it.

[不幸的是,我没有从测试脚本中得到像原始JSON那样完整的东西。相反,我的Twilio响应JSON如下所示:

notification-update-query = UPDATE `xsdslp_npf_notifications` SET `twilio_response` = '[Twilio.Api.V2010.MessageInstance accountSid=AC3365f6c6dceec35edfb902a3e1b8688d sid=SMfeb33b00895e455091445e4901547e70]' WHERE `id` = '5e092437a6037_1577657399'

...以及我为其分配Twilio响应数据的array元素的值看起来像(在使用javascript打印出来之后:]]

$data['twilio_response'] = [Twilio.Api.V2010.MessageInstance accountSid=AC3365f6c6ddaac48edfb902a3e1b8688d sid=SMfeddaac485e455091445e4901547e70]

似乎不是MySQL更新(或插入)的问题,但是JSON响应字符串在我的数组元素变量中已缩短。有人可以告诉我我在做什么错吗?

Wordpress 5.3.2和localhost上的PHP 7.2。我正在发送Twilio短信,并捕获来自JSON的Twilio的响应。我想存储响应,因为其中包含各种各样的好东西,例如...

php json twilio twilio-api twilio-php
1个回答
0
投票

看起来您首先需要在$ data ['twilio_response']上使用json_encode(),因为twl_send_sms返回的对象不是JSON字符串,而是PHP对象。另外,您可以使用serialize()

© www.soinside.com 2019 - 2024. All rights reserved.