我有一个脚本,当我们的调查链接上输入新的调查时,它接收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_encode它并将其正确存储在表中。我的列是latin1编码的,如果它收到一个unicode字符,我看到它在测试中被正确转义。
我甚至尝试记录getallheaders()并显示已发布一些数据。有人可以建议我应该做些什么来弄清楚为什么我的代码存储NULL以及如何防止这种情况?
编辑:
我不确定这是否重要,但我没有直接在表格中输入明文,代码使用aes_encrypt()存储加密数据。但是,正如前面提到的,当我使用aes_decrypt()时,代码大部分都有效,并显示正确的输出。
答案 0 :(得分:0)
这个问题比我想象的要简单。显然,5,000个字符不足以存储传入的POST数据。如果我在插入之前没有加密它,我已经注意到字符串被截断了。由于它被截断,即使aes_decrypt也没有正常工作并返回null。
我现在已经将列大小增加到65,000,并且会观察是否还有更多的空值。理想情况下,MySQL应该警告我插入字符串截断。