首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MySQL数据库中插入空白

在MySQL数据库中插入空白
EN

Stack Overflow用户
提问于 2012-07-01 12:46:22
回答 5查看 2.4K关注 0票数 1

我有一个HTML表单,它向以下PHP文件提交值,将它们插入到MySQL数据库中:

代码语言:javascript
运行
复制
<?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

我已经找了好几个小时来找解决办法了。有人能帮忙吗?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-01 13:07:12

您可以使用mysql数据库中的NULLIF函数。它所做的是,它接受2个参数,并返回空,如果它们是相同的。因此,基本上您可以更改代码如下:

代码语言:javascript
运行
复制
  $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扩展,将会更安全和更好。希望我的回答有帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-07-01 12:51:20

不要在查询中引用它们。相反,首先构建变量,并将引号附加到查询之外的转义字符串值,使您能够在字符串为空时插入NULL关键字:

代码语言:javascript
运行
复制
// 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_*()函数很快就会被废弃。

票数 1
EN

Stack Overflow用户

发布于 2012-07-01 12:52:57

在您的代码中,替换:

代码语言:javascript
运行
复制
$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']) . "')";

通过以下方式:

代码语言:javascript
运行
复制
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']) . "')";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11282058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档