0

我正在整理一个相当简单的 Web 应用程序,它使用用户输入的数据对 sqlite 数据库进行操作,它引起了我的注意,“清理”字符串可能还不够,并且可能会引发更多问题。据我了解,我应该使用准备好的陈述。在我的研究中,我发现 PDO(php 数据对象)具有准备功能,而且 php sqlite3 扩展也提供了准备语句。如果重要的话,此时数据库中没有登录名和敏感信息。

PDO 对我来说似乎是“外星人”,我真的不明白为什么/如何需要使用它。我可以复制/粘贴代码并让它工作,但它的“想法”让我无法理解。

所以我想问题是 PDO OR sqlite3 准备功能是否最好并简要说明原因。

非常感谢,托德

4

2 回答 2

2

说真的,如果您要开始构建您的 Web 应用程序以利用数据库交互,然后获得一些PDO知识,这是物超所值的东西,它可能会帮助您更多地了解 OOP 编码风格,而且只要您使用准备好的声明它始终不会被注射。

无需赘述 PDO 可以处理多种类型的数据库并且具有几乎相同的语法,因此一旦您构建了模型,您就可以轻松地移植到其他数据库而不会遇到太多麻烦。这里有一个关于 PDO 的很棒的教程

<?php 
//Connect this creates a new PDO object
$db = new PDO('sqlite:/path/to/database.sdb');

//Build your sql query with parameters :field 
$sql = "SELECT * FROM sometable WHERE someCol=:field";
//Prepare the above query
$statement = $db->prepare($sql);
//Bind the value received from the form or such with the parameter place holder
$statement->bindParam(':field', $_POST['someVal']);
//Execute the prepared query
$statement->execute();
//Fetch the result
$result = $statement->fetchAll(PDO::FETCH_ASSOC);


//Treat the result as a pure array
foreach ($result as $row){
    //do something
}
?>

互联网上有很多教程比我解释得更好,但要掌握 PDO,因为您将来会在 mysql_* 函数消失时更多地使用它。希望能帮助到你

于 2012-06-18T14:13:13.997 回答
2

PDO 扩展是一个包装器,它统一了对许多不同数据库的访问。只要您在其中编写的 SQL 查询是兼容的,您只需连接到 中的不同数据库即可切换数据库new PDO(...),而无需接触其余代码。

sqlite3 扩展只适用于 SQLite 数据库。如果以后要连接到不同的数据库,则必须重写所有使用 sqlite3 函数的代码。

除此之外,准备好的语句及其工作方式在这两个扩展之间基本相同。我会投票支持 PDO,因为从长远来看,它提供了更大的灵活性,并且意味着您只需学习一个界面即可使用许多不同的数据库。当然请注意,您不能混合使用它们,您必须专门使用其中一种。你不能使用prepare一种方法和execute另一种方法。

于 2012-06-18T13:56:53.927 回答