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()
本地主机上的 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()