我知道这个问题有很多问题,但我无法理解。 我正在使用php的帖子插入数据库。每当我的字段为空时,它在数据库中插入一个'0'而不是NULL值...我的代码如下:
<?php
$host=""; // Host name
$username=""; // Mysql username
$contra=""; // Mysql password
$db_name=""; // Database name
// Connect to server and select database.
$dbh= mysql_connect("$host", "$username", "$contra")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$var1=$_POST["var1"];
$var2=$_POST["var2"];
$var3=$_POST["var3"];
$var4=$_POST["var4"];
// To protect MySQL injection
$var1=stripslashes($var1);
$var2=stripslashes($var2);
$var3=stripslashes($var3);
$var4=stripslashes($var4);
$var1 = mysql_real_escape_string($var1);
$var2 = mysql_real_escape_string($var2);
$var3 = mysql_real_escape_string($var3);
$var4 = mysql_real_escape_string($var4);
$sql="INSERT INTO PREGUNTAS (Var1, Var2, Var3, Var4) VALUES('$var1', '$var2', '$var3', '$var4');";
$table= mysql_query($sql, $dbh) or die ("you've got a problem");
}
break;
}
?>
我尝试像这样启动变量
$var2 = isset($_POST["var2"]) ? "'$var2'" : "NULL";
和
if($_POST['var2'] == "") $_POST['var2'] = "NULL";
但它们都没有工作,查询仍在添加0。
我收到以下错误/通知:
注意:未定义的索引:/.....php中的var2行...
你能帮我吗?
谢谢!
答案 0 :(得分:2)
您在查询中引用了字段值,因此即使您在PHP中将特定变量设置为字符串NULL
,您仍然在尝试
INSERT ... VALUES ('NULL', ...)
SQL NULL
是一个关键字,如果您希望DB将其视为实际的空值,则无法引用它,例如
INSERT ... VALUES(NULL, 'NULL', ...)
^^^^---actual SQL null
^^^^^^--- a string which contains the letters N, U, L, L
这意味着您需要以不同方式重建查询:
if ($_POST['var1'] == '') {
$db_var1 = 'NULL';
} else {
$db_var1 = "'" . mysql_real_escape_string($_POST['var1']) . "'";
}
INSERT ... VALUES($db_var1, ...)
答案 1 :(得分:0)
使用empty()
功能
$var2 = !empty($_POST["var2"]) ? "'$var2'" : NULL;
提交输入字段后, isset()
将始终为true,同时避免使用带NULL
的双引号,否则将插入字符串
答案 2 :(得分:0)
试试这个:
$fields = array('var1','var2','var3','var4');
$values = array();
foreach($fields as $field) :
$field = isset($_POST[$field])? trim($_POST[$field]) : null;
if(is_null($field)) continue;
$values[$field] = "'".mysql_real_escape_string($field)."'";
endforeach;
if(is_array($values) AND !empty($values)) :
$query = "INSERT INTO PREGUNTAS (".implode(',', array_keys($values)).") VALUES (".implode(',', array_values($values)).")";
$table= mysql_query($query, $dbh) or die ("you've got a problem");
endif;
或者这个:
试试这个:
$fields = array('var1','var2','var3','var4');
$values = array();
foreach($fields as $field) :
$field = isset($_POST[$field])? trim($_POST[$field]) : null;
if(is_null($field)) {
$values[$field] = 'NULL',
continue;
}
$values[$field] = "'".mysql_real_escape_string($field)."'";
endforeach;
if(is_array($values) AND !empty($values)) :
$query = "INSERT INTO PREGUNTAS (".implode(',', array_keys($values)).") VALUES (".implode(',', array_values($values)).")";
$table= mysql_query($query, $dbh) or die ("you've got a problem");
endif;