2017-07-16 49 views
0

美好的一天!从JavaScript字典插入到MySQL与PHP空值

我想要做的是从字典(JSON字符串,无论)插入一个空值到MySQL数据库。在控制台上清楚我的数据的值是空的,但插入失败时。我努力在PHP上对null进行编码,并且成功了。我不知道为什么当空值是从字典中返回一个错误。

前1:

$query = "INSERT INTO table (field1) VALUES (" . $data['item'] . ")" <-- not working if item == null 

前2:

$query = "INSERT INTO table (field1) VALUES (null)" <-- tried testing this if the db accepts null and was successful 

我试图找到一些相同的问题,因为我知道这是一个共同的问题,但我没有找到答案,相当有很难弄清楚为什么会发生这种情况。

非常感谢!

+0

你是否检查过'var_dump($ data ['item'])'? – Sean

回答

1

更多细节将有很大的帮助,但最好的猜测是因为PHP转换为null,空字符串,那么你正在构建这个查询:

$query = "INSERT INTO table (field1) VALUES()"; 

这将正确地给你一个SQL错误。试试这个:

$query = "INSERT INTO table (field1) VALUES (" . (is_null($data['item']) ? 'null' : $data['item']) . ")"; 

此外,您可能容易受到SQL injection的影响。您应该始终使用准备好的查询。

+0

非常感谢。现在我试着创建一个日志,它显示了PHP将其转换为''(空字符串)。嗯,我仍然脆弱,即使我过滤整个JSON,如果它有一个撇号它将乘以二,以便MySQL可以注册用户的输入? – Siege21x

+0

或者你有什么建议来防止这种情况发生?我打算为所有内容创建存储函数并使用mysqli。这足够好吗? – Siege21x

+0

最好的办法是问你一些关于信息安全的问题:https://security.stackexchange.com/与往常一样,确保并提供大量的细节,以便你的问题得到彻底的回答。 SQL注入是一个复杂的主题,是一个常见的安全漏洞,也是黑客主动扫描的漏洞。绝对值得学习。我会说保持简单:强大的输入过滤,准备好的查询,白名单动态查询。存储函数也可能容易受到SQL注入攻击,因此请仔细检查它们。 –

0

现在我明白了。值NULL is = to'',因为它确实不包含任何内容('')。但是,当我在单词NULL之前和之后包括撇号时,它会在我的查询上打印NULL字。只是一些小错误。