首页 >  面试题 > 网络营销-企业面试宝典 > 

PHP面试题系列(一)

PHP面试题系列(一)

作者:eld 来源:华育国际 时间:2015-05-28 访问次数:4619
当要处理外部数据源时,PHP 提供了许多不同的方式来与外部世界连接。这当中包括文件访问与 E-Mail 管理。然而,这两种机制的针对性都太强:文件管理只能处理本地文件系统,而 E-Mail 函数也只能解决网络连接中很小一部分的问题。要实现更多的功能,PHP 提供了一种叫“流(st

1.考虑如下 SQL 语句。哪个选项能对返回记录的条数进行限制?(双选)
    SELECT * FROM MY_TABLE
    A.如果可能,用把查询转换成存储例程
    B.如果程序允许,给查询指定返回记录的范围
    C.如果可能,添加 where 条件
    D.如果 DBMS 允许,把查询转换成视图
    E.如果 DBMS 允许,使用事先准备好的语句
答案:B和C
    有两个方法能限制返回记录的条数—使用 where 条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用 select *,这会浪费大量的数据缓存。

2.可以用添加______条件的方式对查询返回的数据集进行过滤?
答案:

    有很多种方式能过滤查询返回的数据,但这题描述的显然是 where 条件。

3.内关联(inner join)是用来做什么的?
    A.把两个表通过相同字段关联入一张持久的表中
    B.创建基于两个表中相同相同行的结果集
    C.创建基于一个表中的记录的数据集
    D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
    E.以上都不对
答案:B
    内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。

4.以下哪个 DBMS 没有 PHP 扩展库?
    A.MySQL
    B.IBM DB/2
    C.PostgreSQL
    D.Microsoft SQL Server
    E.以上都不对
答案:E
    PHP 有 PostgreSQL 和 MySQL 扩展库。访问 DB/2 可以用 ODBC,访问 Microsoft SQL Server 可以用 TDS 和 mssql 扩展。这题考验你对 PHP 的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。

5.考虑如下脚本。假设 mysql_query 函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
    $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
    ?>
    A.MYTABLE 表中的记录超过 1 条
    B.用户输入的数据需要经过适当的转义和过滤
    C.调用该函数将产生一个包含了其他记录条数的记录
    D.给 URL 传递 ID=0+OR+1 将导致 MYTABLE 中的所有表被删除
    E.查询语句中应该包含数据库名
答案:B和D
    用户输入未经过滤就直接送往了数据库,这非常危险。如果 URL 包含ID=0+OR+1 这样的参数时,实际的查询为 DELETE FROM MYTABLE WHERE ID = 0OR 1,数据库将删除表中所有的记录。

6.______语句能用来向已存在的表中添加新的记录。
答案:显然是 INSERT。

7.以下哪个说法正确?
    A.使用索引能加快插入数据的速度
    B.良好的索引策略有助于防止跨站攻击
    C.应当根据数据库的实际应用按理设计索引
    D.删除一条记录将导致整个表的索引被破坏
    E.只有数字记录行需要索引
答案:C
    创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。

8.join 能否被嵌套?
    A.能
    B.不能
答案:能
    你可以嵌套任意数量的 join 条件,但最终的结果可能并不是你想要的。

9.考虑如下数据表和查询。如何添加索引能提高查询速度?
    CREATE TABLE MYTABLE (
    ID INT,
    NAME VARCHAR (100),
    ADDRESS1 VARCHAR (100),
    ADDRESS2 VARCHAR (100),
    ZIPCODE VARCHAR (10),
    CITY VARCHAR (50),
    PROVINCE VARCHAR (2)
    )
    SELECT ID, VARCHAR
    FROM MYTABLE
    WHERE ID BETWEEN 0 AND 100
    ORDER BY NAME, ZIPCODE
    A.给 ID 添加索引
    B.给 NAME 和 ADDRESS1 添加索引
    C.给 ID 添加索引,然后给 NAME 和 ZIPCODE 分别添加索引
    D.给 ZIPCODE 和 NAME 添加索引
    E.给 ZIPCODE 添加全文检索
答案:C
    给 ID 字段设置索引能提高 where 条件执行的效率,给 NAME 和 ZIPCODE设索引则能使排序更快。

10.执行以下 SQL 语句后将发生什么?
    BEGIN TRANSACTION
    DELETE FROM MYTABLE WHERE ID=1
    DELETE FROM OTHERTABLE
    ROLLBACK TRANSACTION
    A.OTHERTABLE 中的内容将被删除
    B.OTHERTABLE 和 MYTABLE 中的内容都会被删除
    C.OTHERTABLE 中的内容将被删除,MYTABLE 中 ID 是 1 的内容将被删除
    D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
    E.数据库没用变化
答案:
    这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。

11.DESC 在这个查询中起什么作用?
    SELECT *
    FROM MY_TABLE
    WHERE ID > 0
    ORDER BY ID, NAME DESC
    A.返回的数据集倒序排列
    B.ID 相同的记录按 NAME 升序排列
    C.ID 相同的记录按 NAME 倒序排列
    D.返回的记录先按 NAME 排序,再安 ID 排序
    E.结果集中包含对 NAME 字段的描述
答案:C
    DESC 能反转默认的排序机制。因此在本题中,数据将先按 ID 升序排列,再按 NAME 降序排列。

12.以下哪个不是 SQL 函数?
    A.AVG
    B.SUM
    C.MIN
    D.MAX
    E.CURRENT_DATE()
答案:
    CURRENT_DATE 函数不是标准 SQL 中的函数(但某些特定的数据库平台可能包含了这个函数)。

13.如果一个字段能被一个包含 GROUP BY 的条件的查询语句读出,以下哪个选项的描述正确?
    A.该字段必须有索引
    B.该字段必须包括在 GROUP BY 条件中
    C.该字段必须包含一个累积值
    D.该字段必须是主键
    E.该字段必须不能包含 NULL 值
答案:B 和 C 正确
    在标准 SQL 中,如果出现 GROUP BY,结果集中所有的字段都必须是聚集值,或者是 GROUP BY 结构本身的一部分。某些 DBMS——比如 MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。

14.以下查询输出什么?
    SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
    ON TABLE1.ID <> TABLE2.ID
    A.TABLE1 和 TABLE2 不相同的记录
    B.两个表中相同的记录
    C.TABLE1 中的记录条数乘以 TABLE2 中的记录条数再减去两表中相同的记录条数
    D.两表中不同记录的条数
    E.数字 2
答案:
    本题描述了一种在使用 join 时常犯的概念性错误。很多人可能觉得这个查询将返回两75个表中非共有记录。但实际上数据库却认为是“读出所有 ID 非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中 ID 非共有的记录。因此,该查询将读取TABLE1 中的每条记录乘以 TABLE2 中的每条记录再减去两表中相同的记录条数。

15.______能保证一组 SQL 语句不受干扰的运行?
答案:
    当要处理外部数据源时,PHP 提供了许多不同的方式来与外部世界连接。这当中包括文件访问与 E-Mail 管理。然而,这两种机制的针对性都太强:文件管理只能处理本地文件系统,而 E-Mail 函数也只能解决网络连接中很小一部分的问题。要实现更多的功能,PHP 提供了一种叫“流(stream)”的工具,使得处理任何文件形式的数据源成为可能。比如,“fopen 封装器”能将外部服务器上的页面读入你的脚本中,这是使用流的最好的例子。它让你能够使用文件函数从英特网中获得内容。最后,更复杂的操作可以通过 socket 编程实现,使得高层应用成为可能。本章考察你对这两个领域中知识的了解。