在CakePHP中保存数据时,使用mysql\u real\u escape\u字符串和htmlspecialchars的最佳方法是什么?

在CakePHP中保存数据时,使用mysql\u real\u escape\u字符串和htmlspecialchars的最佳方法是什么?,mysql,cakephp,mysql-real-escape-string,htmlspecialchars,Mysql,Cakephp,Mysql Real Escape String,Htmlspecialchars,我将FCKEditor与CakePHP一起使用,当我保存从编辑器发送的数据时,我希望在数据上运行htmlspecialchars()和mysql\u real\u escape\u string()函数,以在将其存储到数据库之前对其进行清理。问题是我真的不确定在CakePHP框架中在哪里做这件事。我在控制器中尝试了如下操作: function add() { if (!empty($this->data)) { if ($this->Article->

我将FCKEditor与CakePHP一起使用,当我保存从编辑器发送的数据时,我希望在数据上运行htmlspecialchars()和mysql\u real\u escape\u string()函数,以在将其存储到数据库之前对其进行清理。问题是我真的不确定在CakePHP框架中在哪里做这件事。我在控制器中尝试了如下操作:

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

但是,$this->data是一个数组,这些函数需要字符串,因此无法工作。我是否在模型的验证数组中执行此操作?我不知道。另外,如果在mysql\u real\u escape\u string()中运行htmlspecialchars()不是一个好的做法,请告诉我。

保存数据时不要使用
htmlspecialchars()
,将数据输出到HTML时使用它。如果需要在HTML以外的上下文中查看数据,该怎么办


另外,我不是一个Cake用户,但如果在保存数据时需要应用
mysql\u real\u escape\u string()
,我会感到惊讶。数据库访问层应该保护您不受SQL注入的影响,通过手动操作,您将最终存储双转义字符串。

不要使用
htmlspecialchars()
当您保存数据时,请在将数据输出到HTML时使用它。如果需要在HTML以外的上下文中查看数据,该怎么办


另外,我不是一个Cake用户,但如果在保存数据时需要应用
mysql\u real\u escape\u string()
,我会感到惊讶。数据库访问层应该保护您不受SQL注入的影响,通过手动执行此操作,您将最终存储双转义字符串。

简单的答案是-如果数据库访问已被抽象,则根本不需要调用这些函数

唯一需要它们的地方是从字符串位构建实际的SQL。你无论如何都不应该这么做,但那是另一回事

底线是——框架将做正确的事情,不要干涉


编辑:正如Bill Karwin指出的-
htmlspecialchars()
来自这里完全错误的部门。

简单的答案是-如果数据库访问已被抽象,则根本不需要调用这些函数

唯一需要它们的地方是从字符串位构建实际的SQL。你无论如何都不应该这么做,但那是另一回事

底线是——框架将做正确的事情,不要干涉


编辑:正如Bill Karwin指出的-
htmlspecialchars()
来自完全错误的部门。

如果您使用CakePHP构建自己的SQL字符串,那么CakePHP提供了转义函数:

escape(string $string, string $connection)

如果您使用CakePHP构建自己的SQL字符串,那么CakePHP提供了转义函数:

escape(string $string, string $connection)

谢谢你们两位在这里纠正我的错误。我没有考虑框架是否有可能独立完成这项工作。既然你们两人都有24k的声誉,我想我会相信你们的话@我有24个名声。我不知道“k”来自哪里。@ryanulit:你不必相信我们的话。插入一些应用了不同转义级别的测试数据(确保此测试包含一些特殊字符),然后查询表并查看插入的内容。我只是用一些示例数据进行了尝试,你们是对的。再次感谢。谢谢你们两位在这里帮我理清了思路。我没有考虑框架是否有可能独立完成这项工作。既然你们两人都有24k的声誉,我想我会相信你们的话@我有24个名声。我不知道“k”来自哪里。@ryanulit:你不必相信我们的话。插入一些应用了不同转义级别的测试数据(确保此测试包含一些特殊字符),然后查询表并查看插入的内容。我只是用一些示例数据进行了尝试,你们是对的。再次感谢。是的,但是有时候你必须手工编写SQL,即使你使用的是ORM。不过,OP的问题不是这样。@Bill Karwin:这就是为什么我说“不应该做”,而不是“不应该做”。这就像拿着剪刀跑步,如果你知道自己在做什么,这是完全无害的是的,但有时您必须手工编写SQL,即使您使用的是ORM。不过,OP的问题不是这样。@Bill Karwin:这就是为什么我说“不应该做”,而不是“不应该做”。这就像拿着剪刀跑步,如果你知道自己在做什么,这是完全无害的