Php 在mysql查询中处理空/空数据?

Php 在mysql查询中处理空/空数据?,php,mysql,null,Php,Mysql,Null,假设您的表单有一些字段,有些字段可以由用户直接留空,以便以后填写 在处理SQL查询之前,你们是如何处理它的 我对PHP还是相当陌生的,下面是我是如何做到这一点的 function checkVAR( $str ) { $val = htmlentities( $_REQUEST[$str] , ENT_QUOTES , "UTF-8" ); if ( $val == "" ) return "NULL"; return "'" . $val . "'"; } 那么稍后我的提

假设您的表单有一些字段,有些字段可以由用户直接留空,以便以后填写

在处理SQL查询之前,你们是如何处理它的

我对PHP还是相当陌生的,下面是我是如何做到这一点的

function checkVAR( $str )
{
  $val = htmlentities( $_REQUEST[$str] , ENT_QUOTES , "UTF-8" );
  if ( $val == "" )
    return "NULL";
  return "'" . $val . "'";
}
那么稍后我的提问

$query = "INSERT INTO tblName ( idCol , col2 , col3 ) " .
  "VALUES (" . checkVAR('idcol') . "," . checkVAR('col2') . "," . checkVAR('col3') . ");"

我觉得我的方法仍然很乏味,我想知道是否还有其他更好的方法来处理这种情况。我的这个函数在返回数字方面做得不好,所以我有一个单独的函数,除了返回
0
而不是
null
之外,它做得很好,可能更容易使用:

功能页面: 表单处理程序: 但是,您确实应该检查其他解决方案。我强烈推荐IDIORM,一种简单的数据库ORM(http://j4mie.github.com/idiormandparis/). 这使得插入值与插入值一样简单:

$object = ORM::for_table("table")->create();
$object->value = check_post($var);
$object->save();

首先,在将数据输入数据库之前,不应该对HTML字符进行编码。如果希望通过非HTML显示方式发送数据,会发生什么情况?它可能看起来像一个狼吞虎咽的傻瓜。您至少应该转义字符串数据,并确保将数字数据类型转换为适当的类型。更好的办法是使用事先准备好的声明

我假设您正确地使用了扩展,因为旧的。您正在使用改进的扩展,对吗?对吗?好的

function getNullOrEscaped($string)
{
    // casting ensures that we are passing a string to mysqli_real_escape_string
    // and allows us to pass objects with __toString implemented
    $string = (string) $string;
    return ($string === '') ? null : mysqli_real_escape_string($string);
}

然而,我可能会考虑使用类似的

@Hindol评论,这会让我想对评论投否决票。不学习数据库的东西?数据库保存着你的应用程序,通常不会成为你的应用程序性能问题的所在地,很可能会提高性能。这是一个糟糕的建议。@Hindol:Charles说了什么,但是代码中的错误很容易修复,数据中的错误通常是永久性的,这就是为什么数据库人员对使用检查、FK和其他他们能得到的东西来正确约束数据库如此挑剔的原因。哎呀,我要删除我的评论。实际上,我试图推荐一种与MySQL无关的编写查询的方法。我的措辞是错误的。-1对于在DB输入之前进行HTML转义和使用Jeez,我只是复制了他使用的代码,他可能不想事先转义HTML吗?@charlessraphberry我不得不部分同意,
mysql\uuu
不建议用于开发新的应用程序,但我认为对于旧软件,兼容性仍然存在“deprecated”这个词并不合适,因为它在最新版本的PHP中仍然受到支持。在大多数有经验的开发人员看来,它是高度不推荐和不推荐的,但在PHP方面,它仍然有效,并且没有被弃用。:)使用
htmlentities()有什么问题吗
?@Archio我会尝试一下,虽然一开始可能会很乏味,但从长远来看,我不会对稳定性造成太大的麻烦,因为有时我会出错,只是因为我的函数返回数字有问题。这只对字符串有好处。
已经宣布了长期的反对意见
是的,但不是现在,也不是不久的将来。我只想提一提,许多网站仍然运行在
mysql\uuu
上,比如旧的PHPBB2论坛,实际上不推荐它会迫使这些网站继续使用当前的PHP版本。我同意PDO或(至少)mysqli\u应该用于新的应用程序。我使用了
htmlentities()
假设它会阻止SQL注入。但我在
mysqli\u real\u escape\u string()
的php.net页面上读到,它不会处理
%
有助于防止攻击,而不是SQL注入。
$object = ORM::for_table("table")->create();
$object->value = check_post($var);
$object->save();
function getNullOrEscaped($string)
{
    // casting ensures that we are passing a string to mysqli_real_escape_string
    // and allows us to pass objects with __toString implemented
    $string = (string) $string;
    return ($string === '') ? null : mysqli_real_escape_string($string);
}