我有一个HTML表单,它向以下PHP文件提交值,将它们插入到MySQL数据库中:
<?php
$con = mysql_connect("*","*","*");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("*", $con);
$sql="INSERT INTO scores (hometeam, awayteam, result)
VALUES
('" . mysql_real_escape_string($_POST['hometeam']) . "',
'" . mysql_real_escape_string($_POST['awayteam']) . "',
'" . mysql_real_escape_string($_POST['result']) . "')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
有时HTML表单中的输入字段将为空,在这种情况下,我不希望任何内容插入到数据库中。我希望这个值保持为空。当我像这样填写我的表格时:
主队:蓝队
客队:空无一人
结果: Won
在我的数据库中插入了以下内容:
主队:蓝队
客队:“”
结果: Won
我想插入/不插入的是:
主队:蓝队
客队:零
结果: Won
我已经找了好几个小时来找解决办法了。有人能帮忙吗?谢谢。
发布于 2012-07-01 13:07:12
您可以使用mysql数据库中的NULLIF函数。它所做的是,它接受2个参数,并返回空,如果它们是相同的。因此,基本上您可以更改代码如下:
$sql="INSERT INTO scores (hometeam, awayteam, result)
VALUES
(NULLIF('" . mysql_real_escape_string($_POST['hometeam']) . "', ''),
NULLIF('" . mysql_real_escape_string($_POST['awayteam']) . "', ''),
NULLIF('" . mysql_real_escape_string($_POST['result']) . "', ''))";
它基本上会检查输入的值是否为‘’(空字符串),如果是这样的话,它将将NULL保存在数据库中。在传递到NULLIF之前,您甚至可以从变量中修剪前导或尾随空格,因此,如果有人只在输入框中输入空格,它仍然保存为NULL。
此外,正如Michael所说,如果您继续使用PDO或mysqli扩展,将会更安全和更好。希望我的回答有帮助。
发布于 2012-07-01 12:51:20
不要在查询中引用它们。相反,首先构建变量,并将引号附加到查询之外的转义字符串值,使您能够在字符串为空时插入NULL
关键字:
// If any is not set or empty in the POST, assign the string "NULL" unquoted to a variable
// which will be passed to MySQL as the unquoted NULL keyword.
// Otherwise escape the value from $_POST and surround the escaped value in single quotes
$ateam = !empty($_POST['awayteam']) ? "'" . mysql_real_escape_string($_POST['awayteam']) . "'" : "NULL";
$hteam = !empty($_POST['hometeam']) ? "'" . mysql_real_escape_string($_POST['hometeam']) . "'" : "NULL";
$result = !empty($_POST['result']) ? "'" . mysql_real_escape_string($_POST['result']) . "'" : "NULL";
// Then pass the three variables (already quoted if necessary) directly to the query.
$sql="INSERT INTO scores (hometeam, awayteam, result) VALUES ($hteam, $ateam, $result);
从长远来看,建议开始使用支持准备语句的MySQL API,如PDO或MySQLi。它们提供了更好的安全性,能够更优雅地处理输入NULL,旧的mysql_*()
函数很快就会被废弃。
发布于 2012-07-01 12:52:57
在您的代码中,替换:
$sql="INSERT INTO scores (hometeam, awayteam, result)
VALUES
('" . mysql_real_escape_string($_POST['hometeam']) . "',
'" . mysql_real_escape_string($_POST['awayteam']) . "',
'" . mysql_real_escape_string($_POST['result']) . "')";
通过以下方式:
if($_POST['awayteam'] == '')
$awayteam = 'NULL';
else
$awaytem = "'" . mysql_real_escape_string($_POST['awayteam']) "'";
$sql="INSERT INTO scores (hometeam, awayteam, result)
VALUES
('" . mysql_real_escape_string($_POST['hometeam']) . "',
" . $awayteam . ",
'" . mysql_real_escape_string($_POST['result']) . "')";
https://stackoverflow.com/questions/11282058
复制相似问题