Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_encode($_POST)在数据库中存储为null_Php_Mysql_Json_Post - Fatal编程技术网

Php json_encode($_POST)在数据库中存储为null

Php json_encode($_POST)在数据库中存储为null,php,mysql,json,post,Php,Mysql,Json,Post,我有一个脚本,当在我们的调查链接上输入新的调查时,它接收wufoo.com发送的钩子。我在代码中做的第一件事就是像这样存储post值 $post = $_POST; $db->insert('hook_log', [ 'log_text' => json_encode($post) ]); $db是一个类文件,它具有一个insert函数,该函数将输入数组转换为insert语句,并在表/数据库中执行它们 上述方法适用于大多数部分,但偶尔会在hook_log表中插入null。但更令人困

我有一个脚本,当在我们的调查链接上输入新的调查时,它接收wufoo.com发送的钩子。我在代码中做的第一件事就是像这样存储post值

$post = $_POST;
$db->insert('hook_log', [ 'log_text' => json_encode($post) ]);
$db是一个类文件,它具有一个insert函数,该函数将输入数组转换为insert语句,并在表/数据库中执行它们

上述方法适用于大多数部分,但偶尔会在hook_log表中插入null。但更令人困惑的是,代码的后续部分成功地接收到了正确的数据,并在数据库中创建了所需的行

事实上,在$db->insert()之前,我有以下代码,其内部从未被触发

$post = $_POST;

if ($post == null) {
    $db->insert('hook_log', [ 'log_text' => "Post was empty!! Checking for input: ".json_encode(file_get_contents('php://input')) ]);
    $db->insert('hook_log', [ 'log_text' => "May be get: ".json_encode($_GET) ]);
    $post = json_decode(file_get_contents('php://input'), true);
}
因此,显然我的脚本正在接收正确的POST数据,但不知何故无法对其进行json_编码并将其正确存储在表中。我的列是拉丁1编码的,如果它接收到unicode字符,我会在测试中看到它被正确转义

我甚至尝试记录getallheaders(),它显示一些数据已经发布。有人能建议我应该怎么做才能弄清楚为什么我的代码存储空值以及如何防止这种情况发生吗

编辑:


我不确定这是否重要,但我没有直接向表中输入明文,代码使用aes_encrypt()存储加密数据。但是,如前所述,当我使用aes_decrypt()时,代码在大部分情况下都能正常工作并显示正确的输出。

问题比我想象的要简单。显然,5000个字符不足以存储传入的POST数据。如果我在插入之前没有加密它,我会注意到字符串被截断。由于被截断,即使是aes_decrypt也无法正常工作,并返回null


我现在已经将列大小增加到65000,并将观察是否有更多的null返回。理想情况下,MySQL应该在插入时警告我字符串截断。

问题比我想象的要简单。显然,5000个字符不足以存储传入的POST数据。如果我在插入之前没有加密它,我会注意到字符串被截断。由于被截断,即使是aes_decrypt也无法正常工作,并返回null


我现在已经将列大小增加到65000,并将观察是否有更多的null返回。理想情况下,MySQL应该在插入时警告我字符串截断。

而不是
if($post==null){
,检查
if(is_数组($\u post)和&!empty($\u post))怎么样{
作为
$\u POST
将始终是一个数组,在这种情况下,它应该是一个非空数组。好的,我已将其添加到条件列表中。让我们等待下一个钩子。我还添加了一行来转储未加密的$\u POST,并使其插入json\u last\u error()。将很快更新。而不是
if($POST==null){
,检查
if(is_数组($\u POST)和&!empty($\u POST))如何{
作为
$\u POST
将始终是一个数组,在这种情况下,它应该是一个非空数组。好的,我已将其添加到条件列表中。让我们等待下一个钩子。我还添加了一行来转储未加密的$\u POST,并使其插入json\u last\u error()。很快将更新。