PHP+MySQL的组合是构建网站的一个常见调配,不过怎么运用PHP经过Web拜访MySQL数据库呢?下面从Web数据库架构的作业原理讲起。
从Web查询数据库:Web数据库架构的作业原理
一个用户的浏览器宣布一个HTTP恳求,恳求特定的Web页面,在该页面中动身form表单提交到php脚本文件(如:results.php)中处理
Web服务器接收到对results.php页面的恳求后,检索文件,并将其传递给PHP引擎处理
PHP引擎开端解析脚本。脚本首要包含了衔接数据库和履行查询的指令。PHP启动了对MySQL服务器的衔接并向该服务器发送恰当的查询。
MySQL服务器接收到数据库查询的恳求,开端处理这个查询,并将查询成果回来给PHP引擎。
PHP引擎完结了脚本的运转后,将该HTML回来Web服务器。
Web服务器再将HTML回来给客户端浏览器,用户就能够看到呼应后的成果页面。
从Web查询数据库的根本进程
查看并过滤来自用户的数据 首要,咱们将过滤用户或许在其查找条件的开始或结束方位不小心输入的空白字符,这是用函数trim()来完结。 咱们这么费事的查看用户输入数据的原因是避免多个接口衔接数据库,由于用户从不同的界面进入,这样或许导致安全问题。
然后,当预备运用用户输入的任何数据时,也要恰当的过滤一些控制字符,当用户输入数据到数据库时有必要转义数据,,此刻 运用盗的函数有addslashes()函数、stripslashes()函数和get_magic_qutoes_gpc()函数。addslashes()函数为了数据 库查询句子等的需求在某些字符前加上了反斜线;stripslashes()函数去掉字符串中的反斜线字符;get_magic_qutoes_gpc()函数 戏法增加转义字符 “”,获取当时活动装备magic_quotes_runtime设置,假如运转时封闭戏法引号,回来0,不然回来1。咱们也能够运用 htmispecialchars()对HTML中的特别含义字符警醒编码,htmispecialchars()函数把一些预界说的字符转换为 HTML 实体 【预界说的字符是: (和号) 成为 (双引号) 成为 ‘ (单引号) 成为 ‘ (小于) 成为 > (大于) 成为 >】
树立一个到恰当数据库的衔接 PHP为衔接MySQL供给了函数库mysqli(i表明改善)。
当在PHP中运用mysqli函数库是能够运用面向目标或面向进程的语法:
1、面向目标, @ $db = new mysqli(‘hostname’,’username’,’password’,’dbname’);回来一个目标
2、面向进程: @ $db = mysqli_connect(‘hostname’,’username’,’password’,’dbname’);回来一个资源,这个资源表明数据库的衔接,而且 假如运用进程办法,有必要将这个资源传递到mysqli的一切其它函数。这与处理函数十分相似
mysqli的大多数函数都有面向目标接口和进程接口,二者的差异则在于进程版别的函数称号以mysqli_最初,一起要求传入mysqli_connect()函数取得的资源句柄。 关于这个规矩来说,数据可衔接是一个反常,由于它是由mysqli目标的结构函数来创立的。因而测验衔接时需求进行查看,mysqli_connect_errno()函数将在呈现衔接 过错时回来一个过错号,假如成功,则回来0.
请注意:
当衔接到数据库是,一般会议过错按捺符@作为榜首含代码。这样能够奇妙的处理任何过错,也能够经过反常来处理。别的,MySQK对一起衔接 数据库的衔接数量有必定的约束。MySQLi参数max_connections决议了一起衔接的个数,该参数和相关的Apache参数MaxClients的作用是告知服务器回绝新的衔接恳求, 然后确保体系资源不会再体系繁忙时或体系瘫痪时被恳求或运用。要设置Apache中的MaxClients参数能够修改体系中的httpd.conf文件。要为MySQLi设置max_connections参数 能够修改文件my.conf。
挑选运用的数据库: 在MySQL指令行运用 use dbname;指令;在php中能够用$db->select_db(dbname);或mysqli_select_db(db_resource,dbname)。
查询数据库 要履行数据库查询,首要应结构查询句子:$query = select * from user;然后运转 $result = $db->query($query);或许$result = mysqli_query($db,$query); 面向目标版别将回来一个成果目标;进程版别将回来一个成果资源。不管何种办法都将成果保存在$result变量中工今后运用。假如函数运转失败将回来false。
获取查询成果 运用不同的函数以不同的办法将查询成果从成果目标或标识符中取出来,成果目标或标识符是拜访查询回来行的要害。
一般咱们要得到成果会集记载行的行数,而且运用mysqli_fetch_assoc()函数。
回来行数:$num_results = $result->num_rows;(行数保存在目标的num_rows成员变量中)或$num_results = mysqli_num_rows($result);
然后运用循环遍历每一行,在循环中调用 $row = $result->fectch_assoc();或许 $row = mysqli_fetch_assoc($result);回来该行的信息。 假如是目标回来行则每个要害词为一个特点名,每个值为特点中的相应的值;假如以资源回来则回来数组。
还有其他从成果标识符中获取成果的办法,例如:运用$row = $result->fecth_row($result);或许$row = mysqli_fetch_row($result);将成果取回 到一个罗列数组中;也能够运用$row = $result->fecth_object();或许 $row = mysqli_fecth_object($result);江一行去回到一个目标中。
从数据库断开 先开释成果集:$result->free();或 mysqli_free_result($result);然后封闭数据库衔接:$db->close()或许 mysqli_close($db); 严厉的说,这并不有必要,由于脚本履行结束的时分他们将被主动封闭。
从Web查询数据库:运用Prepared句子
mysqli函数库支撑prepared句子的运用。它们关于在履行很多具有不同数据的相同查询时,能够进步速度,也能够免受SQL打针风格(injection-stytle——的进犯。
prepared句子的根本思想是能够向MySQL发送一个需求履行的查询模板,然后在独自发送数据。咱们能够向相同的prepared句子发送很多的相同的数据;这个特性对批量处理的刺进操作来说是十分有用的。
咱们一般运用一下几个进程:
1、结构模板。已刺进为例: $query = insert into user values(?,?,?,?);
2、运用prepared句子,构建一个句子目标或需求用来完结实践处理的资源。 $stmt = $db->prepare($query);或许mysqli_stmt_prepare($query);
3、调用$stmt->bind_param(sssd,$str1,$str3,$str3,$int4)或许mysqli_stmt_bind_param(sssd,$str1,$str3,$str3,$int4) 告知php那些变量应该被问号所替换。榜首个参数是一个格式化字符串,后边是将要被替换的变量。
3、调用$stmt->execute()或许mysqli_stmt_execute()函数,将真实运转这个query句子
关于select类型查询,能够运用$stmt->bind_result()或mysqli_stmt_bind_result()函数供给期望填充成果列的变量列表,然后每次调用 $stmt->fetch()或许mysqli_stmt_fetch()函数时,成果集下一行的值将被填充到这些绑定变量中。
运用PHP与数据库交互的其他接口
PHP支撑衔接到许多不同数据库的函数,包含Oracle、Microsoft SQL Server和PostgreSQL。一般,衔接和查询这些火速据库的根本原理是相同的,单个 函数称号或许不同。假如期望运用PHP还没有供给支撑的特别数据库,能够运用惯例的ODBC函数。
ODBC表明敞开的数据库衔接,他是衔接数据库的规范。ODBC只具有任何函数集的优先功用,假如要求有必要兼容一切的数据库,就不能运用任何数据库的特别功用。
除了PHP顺便的函数库以外,一些可供运用的数据库笼统类如MDB2答应为不同的数据库类型运用相同的函数名。可是要提早装置笼统层,例如装置PEAR MDB2笼统层。