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

PHP: Trying to insert Twilio response JSON into MySQL TEXT field, but string is being truncated, possibly before the insert

本地主机上的 Wordpress 5.3.2 和 PHP7.2。

我正在发送一条 Twilio 短信,并捕获来自 Twilio 的回复,即 JSON。

我想存储响应,因为里面有各种好东西,比如发送日期时间戳。

当我制作测试文件时,print_r 响应是一个相当大的 JSON 对象。不确定我是否应该 post 在这里,11,568 个字符。这是部分输出(帐户值已略微更改):

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 格式给我一个很好的大回复。

现在,我将我的代码转移到更大的生产上下文中,我想捕获那个 11,568 个字符的 JSON 对象,并将其存储在 table 中(通过更新)。我觉得应该是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 响应数据的数组元素的值看起来像(在使用 javascript 打印出来之后):

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

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

看起来你需要先在 $data['twilio_response'] 上使用 json_encode(),因为从 twl_send_sms 返回的对象不是 JSON 字符串,但是 PHP 对象。或者你可以使用 serialize()