mysql不会取null,而是设置为0

时间:2014-06-19 06:40:27

标签: php mysql null

我正在尝试将NULL值插入到我的数据库中,我尝试了不同的示例,但结果仍然显示为0 所以我强迫它,注意下面的行// ********** $ gefid = null; 然而仍然显示为0,尝试过和没有引号,大写字母,你的名字。 该字段肯定允许Null和null是默认值 代码:

<?php

DEFINE ('DBUSER', 'xxxxxxxxx');
DEFINE ('DBPW', 'xxxxxxxxxxxxxxxxxxxxxxx');
DEFINE ('DBHOST', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com');
DEFINE ('DBNAME', 'Mydb');


$dbc = mysqli_connect(DBHOST,DBUSER,DBPW);
if (!$dbc) {
die("Database connection failed really badly: " . mysqli_error($dbc));
exit();
}

$dbs = mysqli_select_db($dbc, DBNAME);
if (!$dbs) {
die("now the dam Database selection bit failed: " . mysqli_error($dbc));
exit();
}
$lat = mysqli_real_escape_string($dbc, $_GET['lat']);
$lng = mysqli_real_escape_string($dbc,$_GET['lng']);

$prox = mysqli_real_escape_string($dbc,$_GET['prox']);
$description = mysqli_real_escape_string($dbc,$_GET['description']);
$id = mysqli_real_escape_string($dbc,$_GET['id']);
$direction = mysqli_real_escape_string($dbc,$_GET['direction']);
$avoiddays = mysqli_real_escape_string($dbc,$_GET['avoiddays']);
$validfrom = mysqli_real_escape_string($dbc,$_GET['validfrom']);
$validto = mysqli_real_escape_string($dbc,$_GET['validto']);



if (isset($_GET['gefid'])) {
  $gefid = mysqli_real_escape_string($dbc,$_GET['gefid']);
} else {
  $gefid = null;
}
//***********************************
$gefid = null;
$expiry = mysqli_real_escape_string($dbc,$_GET['expiry']);

$query = "INSERT INTO realtime (rt_lat,rt_lng,rt_prox,rt_description,rt_direction,rt_avoiddays,rt_validto,rt_validfrom,rt_gefid,rt_expiry) VALUES ('$lat', '$lng', '$prox', '$description','$direction','$avoiddays','$validto','$validfrom','$gefid','$expiry')"; 

$result = mysqli_query($dbc, $query) or trigger_error("Query MySQL Error: " . mysqli_error($dbc));

mysqli_close($dbc);
?>

3 个答案:

答案 0 :(得分:2)

问题出在你的INSERT语句中,而不是变量赋值。要插入NULL值,您的语句应如下所示(注意,NULL周围没有引号):

INSERT INTO table (column) VALUES (NULL);

您可以创建一些额外的代码来添加或省略这些引号,但我强烈建议使用prepared statements,您不必担心转义和引用。

答案 1 :(得分:1)

你应该:

  1. $gefid = "NULL";代替:$gefid = null;
  2. $gefid
  3. 中的INSERT INTO statement ('$gefid' to $gefid)删除引号

    因为NULL是一个应该传递给MySQL的关键字,而不是"NULL"这是一个字符串,所以你试图将一个字符串传递给数据库中的整数字段。

    编辑:但是如果是这种情况你应该得到MySQL错误,请仔细检查你的Schema是否为默认值0。

答案 2 :(得分:0)

有人对表架构发表了评论,但我会详细说明。 您需要检查表定义是否具有自动分配的默认值,还要查看该列是否为空。

如果您使用:

   SHOW CREATE TABLE realtime;

并检查字段

   DEFAULT 0
   NOT NULL

如果存在这些列定义中的任何一个,那么您将无法在这些列中插入空值。