2012-07-09 49 views
0

我将变量设置为NULL,即时尝试插入数据库,但由于某些原因,他们一直提交为'0'。我肯定,列im试图插入允许NULL,并且默认设置为NULL。继承人我的代码:将NULL变量插入到数据库中

$insert = NULL; 
$query = mysql_query("INSERT INTO `table1` (column1) VALUES ('$insert')") or die(mysql_error()); 
+2

您是否尝试过用事先准备好的声明? 见[http://stackoverflow.com/questions/5329542/php-mysql-insert-null-values][1] [1]:http://stackoverflow.com/questions/5329542/php-mysql-insert-null-values – jle 2012-07-09 15:28:33

+0

尝试在数据库表中将默认值设置为NULL。当你创建一个新的记录时,column1将自动为NULL。或者尝试将$ insert变量设置为null $ insert = null。问题是 - 为什么你需要它作为NULL? – comprex 2012-07-09 15:27:30

回答

5

Warning:

Please, don't use mysql_* functions for new code. They are no longer maintained and the community has begun the deprecation process . Instead you should learn about prepared statements and use either PDO or MySQLi .

IF你希望它是NULL(你真的真的仍然希望在数据库中可以使用mysqli_*)他以下几点:

$insert = NULL; 
$query = mysql_query("INSERT INTO `table1` (column1) VALUES (" 
         .(($insert===NULL)? 
           "NULL": 
           "'".mysql_real_escape_string($insert)."'"). 
        ")") or die(mysql_error()); 

但是,这可能会导致恶意SQL注入,是不是推荐

Bobby Tables


所以:所有的一切,你应该用准备好的语句

您可以使用MySQLi像这样:

 $dbHandle = new mysqli(...); 
     $query = "INSERT INTO `table1` (column1) VALUES (?)"; 
     $statement = $dbHandle->prepare($query); 
     if($statement){ 
      $statement->bind_param('s', $insert); 
      if(!$statement->execute()){ 
       echo "Statement insert error: {$statement->error}"; 
      } 
      $statement->close(); 
     } 
     else { 
      echo "Insert error: {$dbHandle->error}"; 
     } 
+0

这给出了语法错误 – 2012-07-09 15:31:17

+0

错误@JonahKatz是什么? – Neal 2012-07-09 15:31:55

+0

'分析错误:语法错误,意外的T_STRING' – 2012-07-09 15:32:23

0

尝试不带引号;

$query = mysql_query("INSERT INTO `table1` (`column1`) VALUES (".$insert.")") or die(mysql_error()); 

查询应该是;

INSERT INTO table1column1)VALUES(NULL);

+0

这给了我一个mysql错误 – 2012-07-09 15:29:48

+0

好奇 - 错误是什么? – craig1231 2012-07-09 15:31:33

+0

'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行附近'。,'24')'使用正确的语法。 – 2012-07-09 15:33:58

1

试试这个静态查询:

$query = mysql_query("INSERT INTO `table1` (column1) VALUES (NULL)") or die(mysql_error()); 

使用变量:

$insert= NULL; 
$insert = ($insert===NULL)? 'NULL' : "'$insert'"; 
mysql_query("INSERT INTO `table1` (column1) VALUES ($insert)") or die(mysql_error()); 
+0

这可行,但我需要它是一个变量,因为有时变量不是null – 2012-07-09 15:30:08

+0

好吧试试上面的代码.. – 2012-07-09 15:54:36

+0

@MaheshMeniya感谢复制/粘贴:-P – Neal 2012-07-09 15:55:00