一、Web数据库架构的工作原理
一个用户的浏览器发出一个HTTP请求,请求特定的Web页面,在该页面中出发form表单提交到php脚本文件(如:msg.php)中处理首先,我们将过滤用户可能在其搜索条件的起始或结束位置不小心输入的空白字符,这是用函数trim()来实现。 我们这么麻烦的检查用户输入数据的原因是防止多个接口连接数据库,因为用户从不同的界面进入,这样可能导致安全问题。
然后,当准备使用用户输入的任何数据时,也要适当的过滤一些控制字符,当用户输入数据到数据库时必须转义数据,,此时 使用盗的函数有addslashes()函数、stripslashes()函数和get_magic_qutoes_gpc()函数。addslashes()函数为了数据 库查询语句等的需要在某些字符前加上了反斜线;stripslashes()函数去掉字符串中的反斜线字符;get_magic_qutoes_gpc()函数 魔术添加转义字符 “\”,获取当前活动配置magic_quotes_runtime设置,如果运行时关闭魔术引号,返回0,否则返回1。我们也可以使用 htmispecialchars()对HTML中的特殊意义字符警醒编码,htmispecialchars()函数把一些预定义的字符转换为 HTML 实体 【预定义的字符是:& (和号) 成为 & " (双引号) 成为 " ' (单引号) 成为 ' < (小于) 成为 < > (大于) 成为 >】二、PHP关于MySQL的配置表
MySQL 函数的行为受到 php.ini 中设置的影响。名称 | 默认 | 描述 | 可更改 |
---|---|---|---|
mysql.allow_persistent | "1" | 是否允许 MySQL 的持久连接。 | PHP_INI_SYSTEM |
mysql.max_persistent | "-1" | 每个进程中最大的持久连接数目。 | PHP_INI_SYSTEM |
mysql.max_links | "-1" | 每个进程中最大的连接数,包括持久连接。 | PHP_INI_SYSTEM |
mysql.trace_mode | "0" | 跟踪模式。从 PHP 4.3.0 起可用。 | PHP_INI_ALL |
mysql.default_port | NULL | 指定默认连接数据库的 TCP 端口号。 | PHP_INI_ALL |
mysql.default_socket | NULL | 默认的 socket 名称。PHP 4.0.1起可用。 | PHP_INI_ALL |
mysql.default_host | NULL | 默认的服务器地址。不适用于SQL安全模式。 | PHP_INI_ALL |
mysql.default_user | NULL | 默认使用的用户名。不适用于SQL安全模式。 | PHP_INI_ALL |
mysql.default_password | NULL | 默认使用的密码。不适用于SQL安全模式。 | PHP_INI_ALL |
mysql.connect_timeout | "60" | 连接超时秒数。 | PHP_INI_ALL |
在MySQL模块中使用了两种资源类型。第一种是数据库链接的连接句柄,第二种是资源标识符,包含了SQL查询返回的结果集。
如同PHP正则表达式中的预定义常量类似,以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。在PHP4.3.0之后版本及PHP5中,允许在mysql_connect()函数和mysql_pconnect()函数中指定更多的客户端标记。下面列出所定义的常量,如表所示:
常量 | 说明 |
---|---|
MYSQL_CLIENT_COMPRESS | 使用压缩的通讯协议 |
MYSQL_CLIENT_IGNORE_SPACE | 允许在函数名后留空格位 |
MYSQL_CLIENT_INTERACTIVE | 允许设置断开连接之前所空闲等候的 interactive_timeout 时间(代替 wait_timeout)。 |
MYSQL_CLIENT_SSL | 使用 SSL 加密。本标志仅在 MySQL 客户端库版本为 4.x 或更高版本时可用。在 PHP 4 和 Windows 版的 PHP 5 安装包中 |
mysql_fetch_array() 函数使用一个常量来表示所返回数组的类型。下面是常量的定义:
常量 | 说明 |
---|---|
MYSQL_ASSOC | 返回的数据列使用字段名作为数组的索引名。 |
MYSQL_BOTH | 返回的数据列使用字段名及数字索引作为数组的索引名。 |
MYSQL_NUM | 返回的数据列使用数字索引作为数组的索引名。索引从 0 开始,表示返回结果的第一个字段。 |
常量 | 说明 |
---|---|
PREG_PATTERN_ORDER | 对结果排序使得 $matches[0] 为整个模式的匹配结果的数组,$matches[1] 为第一个括号内的子模式所匹配的字符串的数组,等等。本标记仅用于 preg_match_all()。 |
PREG_SET_ORDER | 对结果排序使得 $matches[0] 为第一组匹配结果的数组,$matches[1] 为第二组匹配结果的数组,等等。本标记仅用于 preg_match_all()。 |
PREG_OFFSET_CAPTURE | 见 PREG_SPLIT_OFFSET_CAPTURE 的说明。本标记自 PHP 4.3.0 起可用。 |
PREG_SPLIT_NO_EMPTY | 本标记使 preg_split() 仅返回非空的结果。 |
PREG_SPLIT_DELIM_CAPTURE | 本标记使 preg_split() 也捕获定界符模式中的括号表达。本标记自 PHP 4.0.5 起可用。 |
PREG_SPLIT_OFFSET_CAPTURE | 如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用且仅用于 preg_split()。 |
三、PHP数据库连接
PHP5为连接MySQL提供了新的函数库。这个函数库是 mysqli(i表示改进)。这个函数库适用于MySQL版本4 及其以后版本。在版本4中,MySQL添加了一个新的连接协议,其执行速度更快,而且mysqli允许使用它。mysqli函数库允许使用面向对象或面向过程的语法。请注意:
当连接到数据库是,通常会议错误抑制符@作为第一含代码。这样可以巧妙的处理任何错误,也可以通过异常来处理。