我有输入字段,但如果用户将其留空,我想在我的数据库中插入一个空值。
我要求这样的值:
$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;}
然后没有'围绕值 - 仍然没有插入数据库
答案 0 :(得分:2)
好的,先来这个
INSERT INTO
table
(val1
,val2
,val3
) 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转义值。但这是一个无关的问题。)