【发布时间】:2012-11-02 05:14:27
【问题描述】:
我有一个带有列的表(日志):
秒:bigint(20) UNSIGNED NULL
IP地址:varchar(15) NULL
问题在于,每当变量被赋予 NULL 值时,它们作为 IPAddress 列的空字符串和 Seconds 列的 0 插入列中,而不是 NULL。
//PHP 5.3.9//
if(isset($_POST['sec']))
$seconds = mysql_real_escape_string($_POST['sec']);
else
$seconds = NULL;
if(isset($_POST['ip']))
$ipaddress = mysql_real_escape_string($_POST['ip']);
else
$ipaddress = NULL;
$query = mysql_query("INSERT INTO log (Seconds, IPAddress) VALUES('".$seconds."', '".$ipaddress."')", $DbConnectionMyDb);
我在谷歌上搜索过,但所有答案都假设我已经知道变量 $sec 和 $ip 是否将为 NULL。在我的情况下,它取决于 POST 数据。
非常感谢任何帮助。 谢谢。
【问题讨论】:
-
使用占位符。他们将负责
NULL的处理.. 并负责 SQL 注入 而无需手动调用某个丑陋的函数。 (问题是''是一个字符串,而不是NULL在插入中用作值。) -
因为当你得到它们时它们是字符串,因此你对待它们(mysql_real_escape_STRING)
-
您的 PHP 将字符串定义为 NULL,这与 mysql NULL 不同。在您的查询中,您应该检查(即 if 语句)以查看变量是否为 NULL,如果是,则应如下所示:VALUES(NULL, '".$ipaddress."') 不带引号。
-
Insert NULL variable into database 的可能重复项 - 为 obsolete
mysql_和切换到mysqli_的示例提供解决方案。 stackoverflow.com/questions/5329542/…(同样)搜索“tag:php insert null”以获得更多结果。 -
Please, don't use
mysql_*functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.