2012-07-07 78 views
1

如何在SQL查询中传递“NULL”或“字符串”。在mysql中插入查询字符串中的NULL或'string'

例如(城市是可选的并且可以NULL在MySQL使用)

<?php 
$var = !empty($_POST['city']) ? $_POST['city'] : NULL; 
$query = mysql_query("INSERT INTO table VALUES('".$_POST['firstname']."','".$var."')"); 
?> 

这不是工作,怎么一回事,因为NULL和“NULL”(作为字符串)不为MySQL相同。

+0

**你的代码是脆弱的到SQL注入。**你真的应该使用[prepared statements](http://stackoverflow.com/a/60496/623041),将你的变量作为参数传递给它,而这些参数不会被SQL评估。如果你不知道我在说什么,或者如何解决它,请阅读[Bobby Tables]的故事(http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain) 。 – eggyal 2012-07-07 16:05:21

+0

另外,正如在['mysql_query()'](http://php.net/manual/en/function.mysql-query.php)函数的PHP手册中所述:*不推荐使用此扩展名。相反,[MySQLi](http://www.php.net/manual/en/book.mysqli.php)或[PDO_MySQL](http://www.php.net/manual/en/ref.pdo-应该使用mysql.php)扩展名。另请参见[MySQL:选择API](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)指南和[相关FAQ](http://www.php.net/manual /en/faq.databases.php#faq.databases.mysql.deprecated)以获取更多信息。* – eggyal 2012-07-07 16:05:31

回答

4

不要围绕NULL与查询报价:

$var = !empty($_POST['city']) ? ("'" . $_POST['city'] . "'") : 'NULL'; 
$query = mysql_query("INSERT INTO table VALUES('".$_POST['firstname']."',".$var.")"); 

现在,如果没有指定$_POST['city']时,您的查询会是这个样子:

INSERT INTO table VALUES('nickb',NULL)