MySQL使用$ _REQUEST获取值后插入NULL值

时间:2012-03-05 23:44:36

标签: php mysql sql null

我有输入字段,但如果用户将其留空,我想在我的数据库中插入一个空值。

我要求这样的值:

$val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES);

然后将它们插入数据库:

INSERT INTO `table` ( `val1` , `val2` , `val3`) 
VALUES ('$val1', '$val2', '$val3');

我已经尝试删除'around val1,val2,val3 - 但是如果没有值,则不会将任何内容插入到数据库中。我也试过这样的事情:

if (!empty($val1)) {
$val1 = "'".$val1."'";
} else {
$val1 = NULL;}

然后没有'围绕值 - 仍然没有插入数据库

4 个答案:

答案 0 :(得分:2)

好的,先来这个

  

INSERT INTO tableval1val2val3)   VALUES('val1','val2','val3');

只会插入文字值“val1”,“val2”和“val3”。您没有使用任何PHP变量。

其次,使用预准备语句和参数绑定来执行查询以保护自己免受SQL注入。例如,使用PDO

$pdo = new PDO(/* DSN, username and password, just read the docs */);

$stmt = $pdo->prepare('INSERT INTO table (val1, val2, val3) VALUES (?, ?, ?)');

$params = array(
    isset($_REQUEST['val1']) ? $_REQUEST['val1'] : null,
    isset($_REQUEST['val2']) ? $_REQUEST['val2'] : null,
    isset($_REQUEST['val3']) ? $_REQUEST['val3'] : null
);

$stmt->execute($params);

此外,您不应对进入数据库的值进行HTML编码。在HTML文档中显示值时执行编码。

答案 1 :(得分:0)

如果我理解正确,你的意思是:

$val1 = null;
$val2 = null;
$val3 = null;

if(isset($_REQUEST['val1']))
    $val1 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val1"], ENT_QUOTES, 'utf-8'))."'";

if(isset($_REQUEST['val2']))
    $val2 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val2"], ENT_QUOTES, 'utf-8'))."'";


if(isset($_REQUEST['val3']))
    $val3 = "'".mysql_real_escape_string(htmlspecialchars($_REQUEST["val3"], ENT_QUOTES, 'utf-8'))."'";


mysql_query("INSERT INTO `table` ( `val1`, `val2`, `val3`) 
VALUES ($val1, $val2, $val3)");
通过类似的东西,我的意思是这是一个应该更加安全的简化版本。您只是在寻找如何传递空值,所以您可以从这里获取它。

答案 2 :(得分:0)

在数据库插入/查询中使用用户提交的值时务必小心 - 请参阅http://bobby-tables.com/

<?php

$val1 = 'NULL';
$val2 = 'NULL';
$val3 = 'NULL';

if( isset( $_REQUEST['val1'] ) && !empty( $_REQUEST['val1'] ) )
    $val1 = "'".mysql_real_escape_string( $_REQUEST['val1'] )."'";

if( isset( $_REQUEST['val2'] ) && !empty( $_REQUEST['val2'] ) )
    $val1 = "'".mysql_real_escape_string( $_REQUEST['val2'] )."'";

if( isset( $_REQUEST['val3'] ) && !empty( $_REQUEST['val3'] ) )
    $val1 = "'".mysql_real_escape_string( $_REQUEST['val3'] )."'";


mysql_query("INSERT INTO `table` ( `val1`, `val2`, `val3`) 
VALUES ($val1, $val2, $val3)");

(我承认PDO的论点,但是,如果这个用户和大多数PHP社区一样,目前正在使用mysql_*函数,那么我是谁要求他们做其他事情呢?)

答案 3 :(得分:0)

您的基本问题是要在MySQL中插入null,您必须使用SQL常量NULL。引用它将无法正常工作。这意味着您必须在SQL语句中将'$val1'替换为NULL

这个小问题是为你准备的语句,以及任何体面的ORM层。

(在放入数据库之前,您通常也不需要HTML转义值。但这是一个无关的问题。)