0

假设您的表单有一些字段,而有些字段可以由用户简单地留空以便稍后填写。

你们在处理 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.

4

2 回答 2

2

首先,您不应该在将数据输入数据库之前对 HTML 字符进行编码。如果您希望通过某种非 HTML 显示方式发送该数据会怎样?它可能看起来像狼吞虎咽的东西。您至少应该转义字符串数据并确保将数字数据类型转换为适当的类型。更好的是使用准备好的语句。

我将假设您正确使用了mysqli扩展,因为旧的mysql_*API 已被弃用。您正在使用改进的扩展程序,对吗?对?行!

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);
}

但是,我可能会考虑使用准备好的语句

于 2012-05-18T02:31:35.253 回答
-1

这使您所做的更漂亮,并且可能更易于使用:

功能页面:

function check_post($var)
{
  $val = mysql_real_escape_string($_POST[$var]);
  return ($var== "") ? NULL : "'" . $var . "'";
}

表单处理程序:

$value = check_post($var);
$query = "INSERT INTO `table` (id, col1) VALUES (" . $value . ")";

但是,您确实应该检查其他解决方案。我强烈推荐 IDIORM,一个简单的数据库 ORM (http://j4mie.github.com/idiormandparis/)。这使得插入值变得如此简单:

$object = ORM::for_table("table")->create();
$object->value = check_post($var);
$object->save();
于 2012-05-18T02:20:13.007 回答