Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL在通过$\u请求获取值后插入空值_Php_Mysql_Sql_Null - Fatal编程技术网

Php MySQL在通过$\u请求获取值后插入空值

Php MySQL在通过$\u请求获取值后插入空值,php,mysql,sql,null,Php,Mysql,Sql,Null,我有输入字段,但如果用户将其留空,我希望向数据库中插入空值 我要求这样的值: $val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES); if (!empty($val1)) { $val1 = "'".$val1."'"; } else { $val1 = NULL;} $val1 = null; $val2 = null; $val3 = null; if(isset($_REQUEST['val1'])) $val1 = "

我有输入字段,但如果用户将其留空,我希望向数据库中插入空值

我要求这样的值:

$val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES);
if (!empty($val1)) {
$val1 = "'".$val1."'";
} else {
$val1 = NULL;}
$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)");
然后将它们插入数据库:

INSERT INTO `table` ( `val1` , `val2` , `val3`) 
VALUES ('$val1', '$val2', '$val3');
我已经试着删除了'around val1,val2,val3',但是如果没有值,就不会在数据库中插入任何内容。我也试过这样的方法:

$val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES);
if (!empty($val1)) {
$val1 = "'".$val1."'";
} else {
$val1 = NULL;}
$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)");
然后在没有“环绕值”的情况下-仍然没有插入到DB中

好的,首先

插入
val1
val2
val3
) 值('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文档中显示值时执行编码。

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

$val1 = htmlspecialchars($_REQUEST["val"], ENT_QUOTES);
if (!empty($val1)) {
$val1 = "'".$val1."'";
} else {
$val1 = NULL;}
$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)");

我的意思是,这是一个简化版本的东西,应该得到更多的保护。您只是想知道如何传递空值,所以可以从这里开始使用。

在数据库插入/查询中使用用户提交的值时一定要小心-请参阅


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

这个小把戏是准备好的语句为您处理的东西,任何像样的ORM层也是如此


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

在这种情况下,对于SQL注入方面,您应该建议一个更好的解决方案+1。我唯一感兴趣的是初始
null
值是否需要
$val1='null'
,以便在以后编译SQL查询时将它们作为字符串(而不是字符串中的字符串)处理。我在这里测试了它,与SQL相呼应,它们只是作为空字符串处理——这不是OP想要的。
mysql.*
函数已经过时了,永远不应该被建议使用@韦比戴夫-你在开玩笑吗?那么,在整个网站上爬行并停靠80%与数据库相关的php问题怎么样?Guy问的是空值而不是db标准。是的,我同意PDO更好,但我不希望有人问这样的问题就能理解它。现在,他有了一个与PDO相关的答案,但如果他只是想要一些有效的东西,而不关心现代化,那么mysql_查询仍然可以工作。还不如告诉他换成python。说真的,所有这些热都是为了一个基本的答案。@Kai-Qing:我看不出你指的所有热(见鬼,我甚至没有投反对票)。使用mysql的答案通常是这样做的,因为提问者首先使用了它们。即便如此,他们通常还是会建议在答案中的某个地方切换到PDO。在这种情况下,没有使用DB函数,那么为什么建议采用不受欢迎的过时方法呢?然而,我留下评论的主要原因是希望其他读者能看到它,并避免使用这些函数。我不认为这有什么错,还有PDO。一定要使用DB处理程序,因为PDO会覆盖大量您可能不想反复手动写入的内容。希望我能+2使用PDO而不是
mysql.*
函数。太多人认为使用那些过时的函数仍然是合适的。@Phil我刚刚尝试过这个,它不插入空值。如果字段中没有键入任何内容,则会插入空格。OP没有说明正在使用的内容。那么,为什么要建议一种过时的、不受欢迎的方法呢?下一步你会推荐魔术语录吗?;)@Lucanos在查看编辑历史时,没有一次提到任何DB扩展