app教程网 综合百科 linux apache php(linux php服务)

linux apache php(linux php服务)

揭露PHP应用中常见的五个数据库问题,包括数据库模式设计、数据库访问和使用数据库的业务逻辑代码,以及它们的解决方案。

如果只有一种正确使用数据库的方法.

你可以用很多方法创建数据库设计、数据库访问和基于数据库的PHP业务逻辑代码,但通常都以出错告终。本文阐述了数据库设计中的五个常见问题以及访问数据库的PHP代码。

以及遇到这些问题如何修复。

问题一:直接用MySQL。

一个常见的问题是,比较老的PHP代码直接使用mysql_ function访问数据库。清单1展示了如何直接访问数据库。

清单1.Access/get.php

注意,mysql_connect函数用于访问数据库。另请注意查询,其中使用字符串连接将$name参数添加到查询中。

这项技术有两个很好的替代品:PEAR DB模块和PHP数据对象(PDO)类。两者都提供了对特定数据库选择的抽象。因此,

您的代码可以在IBM DB2、MySQL、PostgreSQL或任何其他您想连接的数据库上运行,而无需太多调整。

使用PEAR DB模块和PDO抽象层的另一个价值是,你可以在SQL语句中使用它?接线员。这样做可以使SQL更容易维护,并保护您的应用程序免受SQL注入攻击。

使用PEAR DB的替代代码如下。

清单2.Access/get_good.php

注意,除了$dsn中的数据库连接字符串之外,所有对MySQL的直接使用都被取消了。另外,我们通过了?运算符在SQL中使用$name变量。然后,

查询的数据通过query()方法末尾的数组发送。

问题2:没有使用自动递增功能。

像大多数现代数据库一样,MySQL可以基于每条记录自动创建递增的唯一标识符。另外我们还是会看到这样的代码,就是先运行一个SELECT语句找到最大的id,然后将id加1。

发现了一个新记录。清单3显示了一个坏模式的例子。

清单3.Badid.sql

这里的id字段被简单地指定为一个整数。因此,尽管它应该是惟一的,我们仍然可以添加任何值,如CREATE语句后的几个INSERT语句所示。

清单4显示了向这种模式添加用户的PHP代码。

清单4.Add_user.php

add_user.php中的代码首先执行一个查询来查找id的最大值。然后,该文件运行id值加1的INSERT语句。在负载较重的服务器上,如果出现竞争情况,此代码将会失败。另外就是效率低。

那么还有什么选择呢?使用MySQL中的自动递增特性为每次插入自动创建一个惟一的ID。更新后的模式如下。

清单5.Goodid.php

我们添加了NOT NULL标志来指示该字段不能为空。我们还添加了AUTO_INCREMENT标志来指示该字段自动递增,并添加了主键标志来指示该字段是一个id。

这些变化加快了步伐。清单6显示了更新后的PHP代码,它将用户插入到表中。

本文来自网络,不代表本站立场,转载请注明出处:https: