PHP mysqli_real_escape_string将空字符串转换为单个空格

时间:2018-06-26 12:19:11

标签: php mysqli

我的应用程序运行正常。在PHP中调用SQL命令之前,已经打开了数据库连接。

问题在于输入形式中的某些参数为空,并且在使用real_escape_string之后,参数在数据库中存储了一个空字符串。数据库列设置为默认为NULL。

这是预期的吗?我在PHP文档中找不到任何相关的内容。

是否可以简单地使它存储NULL?

代码如下:

"INSERT INTO address SET firstname = '" . $mysqli->real_escape_string($data['firstname']) . "'";

2 个答案:

答案 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。然后将其合并到您的查询中,然后将在随后的步骤中运行。

这绝不是唯一(甚至是最好的)方法,但是根据您提供的代码,这应该为您提供一个开始。