宝哥软件园

常见PHP数据库解决方案分析与介绍

编辑:宝哥软件园 来源:互联网 时间:2021-10-02

我们在使用PHP连接数据库时会遇到很多问题。本文揭示了PHP应用程序中常见的数据库问题——,包括数据库模式设计、数据库访问和使用数据库的业务逻辑代码——,以及它们的解决方案。如果只有一种使用数据库的方法是正确的。

PHP数据库问题:直接使用MySQL。

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

清单1。Access/get.php。

<?php函数get _ user _ id($ name){ $ db=MySQL _ connect(' localhost ',' root ',' password ');MySQL _ select _ db(' user ');$ RES=MySQL _ query(' SELECT id FROM user WHERE log in=')。$name。'' );while($ row=MySQL _ fetch _ array($ RES)){ $ id=$ row[0];}返回$ id} var _ dump(get _ user _ id(' jack ');>请注意,mysql_connect函数用于访问数据库。还要注意查询,它使用字符串串联将$name参数添加到查询中。这项技术有两个很好的替代品:PEAR数据库模块和PHP数据对象(PDO)类。两者都选择从特定的数据库中提供抽象。因此,您的代码可以在IBM中使用,无需太多调整。DB2?MySQL、PostgreSQL或您想要连接到的任何其他数据库。使用PEAR DB模块和PDO抽象层的另一个价值是可以在SQL语句中使用?接线员。这样做将使SQL更容易维护,并保护您的应用程序免受SQL注入攻击。

清单2。访问/获取good.php。

<?PHP require _ once(' db . PHP ');函数get _ user _ id($ name){ $ DSN=' MySQL ://root :[email protected]/users ';$ db=db :3360 connect($ DSN,array());if(pear : iserror($ db)){ die($ db-> getMessage());} $res=$db->查询(' SELECT id FROM users WHERE login=?',array($ name));$ id=nullwhile($ RES-> fetchInto($ row)){ $ id=$ row[0];}返回$ id} var _ dump(get _ user _ id(' jack ');>请注意,除了$dsn中的数据库连接字符串之外,MySQL的所有直接使用都已取消。另外,我们通过了吗?运算符在SQL中使用$name变量。然后,查询的数据通过query()方法末尾的数组发送进来。

PHP数据库问题:不要使用自动递增功能。

像大多数现代数据库一样,MySQL可以在每条记录的基础上创建自动递增的唯一标识符。此外,我们仍然会看到这样的代码,即首先运行SELECT语句来查找最大的id,然后将id增加1并查找新记录。清单3显示了一个坏模式的例子。

清单3。badid.sql。

如果存在用户,则删除表;CREATE TABLE用户(id MEDIUMINT,登录文本,密码文本);插入用户值(1,“杰克”,“通过”);插入用户值(2,“joan”,“pass”);插入用户值(1,“简”,“通过”);这里,id字段被简单地指定为整数。因此,尽管它应该是唯一的,但我们可以添加任何值,如CREATE语句后的几个INSERT语句所示。清单4显示了将用户添加到这种模式的PHP代码。

清单4。地址_ user.php。

add_user.php中的代码首先执行一个查询来查找id的最大值。然后,该文件运行id值加1的INSERT语句。在高负载服务器上,此代码将在竞争条件下失败。此外,它也是低效的。那么有什么选择呢?使用MySQL中的自动增量功能为每个插入自动创建一个唯一的标识。

<?PHP需要_ once(' db。PHP’);函数add_user($name,$ pass){ $ rows=array();$ DSN=' MySQL ://root :[email protected]/bad _ badid ';$ db=db :3360 connect($ DSN,array());if(pear : iserror($ db)){ die($ db-> getMessage());} $ RES=$ db-> query(' SELECT max(id)FROM users ');$ id=null while($ RES-> fetchInto($ row)){ $ id=$ row[0];} $ id=1;$ sth=$ db->准备('插入用户值(?)' );$db->execute($sth,array($id,$name,$ pass));返回$ id} $id=add_user('jerry ',' pass ');var _ dump($ id);> 希望通过本文的介绍,能够让你对服务器端编程语言(专业超文本预处理器的缩写)数据库解决方案,更加了解。

更多资讯
游戏推荐
更多+