我的应用程序运行正常。在PHP中调用SQL命令之前,已经打开了数据库连接。
问题在于输入形式中的某些参数为空,并且在使用real_escape_string之后,参数在数据库中存储了一个空字符串。数据库列设置为默认为NULL。
这是预期的吗?我在PHP文档中找不到任何相关的内容。
是否可以简单地使它存储NULL?
代码如下:
"INSERT INTO address SET firstname = '" . $mysqli->real_escape_string($data['firstname']) . "'";
答案 0 :(得分:1)
期望您告诉服务器使用您正在执行的空字符串。您需要在代码中添加一些逻辑,以便在字符串为空时使用null
。
此外,您对SQL injection持开放态度。您需要使用准备好的语句,而不是将变量连接到查询中。转义字符串是不够的。参见How can I prevent SQL injection in PHP?。
答案 1 :(得分:0)
您可能应该将数据验证与查询创建分开。可以按照以下步骤进行操作:
$firstName = strlen($data['firstname'])? "'".$mysqli->real_escape_string($data['firstname'])."'": "NULL";
$sql = "INSERT INTO address SET firstname = " . $firstName;
这将检查$ data ['firstname']中是否有值,如果没有,则使用Null。然后将其合并到您的查询中,然后将在随后的步骤中运行。
这绝不是唯一(甚至是最好的)方法,但是根据您提供的代码,这应该为您提供一个开始。