2011-11-27 26 views
0

我目前使用PHP标准库函数工作,为净化功能的mysql_query字符串输入(不只是的stripslashes和mysql_client_encoding但检查整个查询的一致性,包括验证一些重要的字段值,并检查了一些表的访问限制)PHP数据库访问工具包消毒

我已经告诉任何我的项目,面临这样的问题时,不管多么小的使用发展框架/扩展库就像CakePHP的或梨可以让我的生活更轻松。

从我的角度来看,在做简单的小项目时,任何添加到标准库中的东西都可能会很棘手,通常不值得付出努力,但我真的很渴望探索从头开始编写所有代码的替代方案在那里。

在何处或用什么启动任何建议?

回答

1

PHP的PDO处理与准备好的查询所有卫生。它已经为您编写并默认包含在PHP> = 5.1中。另外,它兼容一大堆数据库引擎(MySQL,MsSQL,Oracle,PostgreSQL,SQLite等),并增加了对事务的支持。

//Works for 
$id = 23; 
$id = 'harmless string'; 
$id = '0 OR WHERE 1 = 1 --'; 

$pdo = new PDO('mysql:host=localhost', $username, $password); 
$stmt = $pdo->prepare('SELECT title, body FROM posts WHERE id = :id'); 
$stmt->execute(array(
    ':id' => $id // Automatically handles sanitizing 
)); 
$results = $stmt->fetchAll(); 
+0

惊人的答案,惊人的速度,我很惊讶,我hvent了解PDO手册中为前,哑我! – NotGaeL

+1

@elcodedocle现在您已经知道了,您的任务是通过SO传播PDO的知识。惩罚任何谁仍然使用'mysql_ *'家庭的功能:) –

1

如果你不这样做已经在最低限度,可以考虑使用的database extensionsPDO而不是mysql_query()和所有之一。如果你正确地使用它们,它们有一些非常好的功能,例如查询消毒来阻止SQL注入,而不必记得运行mysql_real_escape_string()

+0

非常感谢您的快速回答,你是对的,我应该开始这个工作的时候了! – NotGaeL