2

如果输入字段为空,则尝试插入为 NULL,使用PHP.

我有一个INT默认为NULL. 这是为了让曲棍球运动员输入他们的球衣号码。

如果他们没有球衣号码,他们的“球衣”字段在我的 MySQL 数据库中应该为空。但是当我mysql_real_escape_string的值(即$jersey = NULL)时,它默认为zero

我必须将我的字段更改为 aVARCHAR吗?或者有解决办法mysql_real_escape_string吗?

这是我的插入代码:

sprintf("INSERT INTO players (playerName, playerNumber,) 
VALUES 
('%s',%d,)",
mysql_real_escape_string($name),
mysql_real_escape_string($number)

感谢您的任何见解。搜索 SO 时我找不到任何答案。

4

2 回答 2

1

这根本不是 mysql_real_escape_string 问题。

而是您创建查询的方式。

对于旧的 mysql 扩展,唯一的方法是添加文字NULL而不是变量。

$name = "'".mysql_real_escape_string($name)."'";
$number = is_null($number) ? 'NULL' : intval($number);
$sql = "INSERT INTO players (playerName, playerNumber) VALUES ($name, $number)";

或者,如果你想摆脱混乱,使用safeMysql

$sql = "INSERT INTO players (playerName, playerNumber) VALUES (?s, ?i)";
$sd->query($sql, $name, $number);

在非常令人信服的请求之后,我终于将 PHP 空值转换为查询空值。
这将是所有提议的解决方案中最短的代码。

于 2013-10-04T22:45:28.257 回答
1
sprintf("INSERT INTO players (playerName, playerNumber) VALUES (%s, %s)",
  is_null($name)   ? 'NULL' : "'".mysql_real_escape_string($name)."'"
  is_null($number) ? 'NULL' : "'".mysql_real_escape_string($number)."'"
)
于 2013-10-04T22:57:39.643 回答