PHP+mysql真题

来自《PHP程序员面试笔试宝典》,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书。

【真题215】按要求写出SQL实现。

1)创建新闻发布系统,表名为message,有如下字段:

id 文章id

title 文章标题

content 文章内容

category_id 文章分类id

hits 点击量

参考答案:

CREATE TABLE 'message'(

'id' int(10) NOT NULL auto_increment,

'title' varchar(200) default NULL,

'content' text,

'category_id' int(10) NOT NULL,

'hits' int(20),

PRIMARY KEY('id');

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2)同样上述新闻发布系统:表comment记录用户回复内容,字段如下:

comment_id 回复id

id 文章id,关联message表中的id

comment_content 回复内容

现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面。

文章id 文章 标题 点击量 回复 数量

用一个SQL语句完成上述查询,如果文章没有回复,则回复数量显示为0。

参考答案:

SELECT message.id id,message.title title,IF(message.'hits' IS NULL,0,message. 'hits') hits,

IF(comment. 'id' is NULL,0,count(*)) number FROM message LEFT JOIN

comment ON message.id=comment.id GROUP BY message. 'id';

上述内容管理系统,表category保存分类信息,字段如下:

category_id int(4) not null auto_increment;

category_name varchar(40) not null;

3)用户输入文章时,通过选择下拉菜单选定文章分类,写出如何实现这个下拉菜单。

参考答案:

function categoryList()

{

$result=mysql_query("select category_id,categroy_name from category")

or die("Invalid query: " . mysql_error());

print("/n");

while($rowArray=mysql_fetch_array($result))

{

print("".$rowArray['categroy_name']." option>/n");

}

print("");

}

【真题216】使用PHP写一段简单查询,查出所有姓名为“张三”的内容并打印出来。

表名User

Name    Tel      Content      Date

张三 13333663366 大专毕业2006-10-11

张三 13612312331 本科毕业2006-10-15

张四 021-55665566 中专毕业2006-10-15

参考答案:根据上面的题目完成代码:

$mysql_db=mysql_connect("local","root","pass");

@mysql_select_db("DB",$mysql_db);

$result = mysql_query("SELECT * FROM 'user' WHERE name='张三'");

while($rs = mysql_fetch_array($result)){

echo $rs["tel"].$rs["content"].$rs["date"];

}

【真题217】考虑如下SQL语句,哪个选项能对返回记录的条数进行限制?(    )(双选)

SELECT * FROM MY_TABLE

A.如果可能,那么把查询转换成存储例程

B.如果程序允许,那么给查询指定返回记录的范围

C.如果可能,那么添加 where 条件

D.如果DBMS允许,那么把查询转换成视图

参考答案:B、C。

分析:有两个方法能限制返回记录的条数——使用where条件或limit关键字指定查询返回的记录的范围。

通常情况下,如果没有特殊需要,那么尽量不要用 select *,这会浪费大量的数据缓存。

【真题218】执行以下 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.数据库没有变化

参考答案:D。

分析:这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化。

【真题219】以下查询的输出结果是(    )。

SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.ID <> TABLE2.ID

A.TABLE1和TABLE2不相同的记录

B.两个表中相同的记录

C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数

D.两表中不同记录的条数

参考答案:C。

分析:本题描述了一种在使用JOIN时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有 ID 非共有的记录”。DBMS将读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。

【真题222】以下说法正确的是(    )。

A.使用索引能加快插入数据的速度

B.良好的索引策略有助于防止跨站攻击

C.应当根据数据库的实际应用合理设计索引

D.删除一条记录将导致整个表的索引被破坏

参考答案:C。

分析:索引的作用主要是帮助数据库快速查找到对应的数据,并不能加快插入数据的速度,所以,选项A错误。

索引不能够帮助防止跨站攻击,所以,选项B错误。

创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。索引是占用物理空间的,所以在实际的应用中是要合理设计使用索引的。所以,选项C正确。

索引是一种表结构,删除一条数据也不会影响到整个表的索引,并且索引不一定是数字,也可以是字符串。所以,选项D错误。

【真题223】下列关于全文检索技术的说法中,不正确的是(    )。

A.Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL做全文搜索,它可以提供比数据库本身更专业的搜索功能

B.Solr是新一代的全文检索组件,它比Lucene的搜索效率高很多,还能支持HTTP的访问方式,PHP调用Solr也很方便

C.MySQL中把一个字段建立FULLTEXT索引,就可以实现全文检索,目前MyISAM和InnoDB的table都支持FULLTEXT索引

D.Lucene附带的二元分词分析器CJKAnalyzer切词速度很快,能满足一般的全文检索需要

参考答案:B。

分析:Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

Solr是一个独立的企业级搜索应用服务器,用户可以通过HTTP请求访问,它是采用JAVA5开发,基于Lucene的全文搜索服务器,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。并且Solr比Lucene的搜索效率高很多,但是PHP调用Solr并不方便,选项B的说法错误。

MySQL中的MyISAM和InnoDB都是支持FULLTEXT全文索引的。全文搜索引擎可以在不使用模板匹配操作的情况下查找单词或短语。

真题153:PHP连接MySQL的方法

1.建立连接MySQL服务器

在PHP中,首先要与MySQL服务器建立连接后才能连接数据库,用于连接MySQL服务器的函数是mysql_connect()函数,语法格式如下:

resource mysql_connect([string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]])

如果使用同样的参数第二次调用mysql_connect()函数,那么将不会建立新连接,而将返回已经打开的连接标志。参数$new_link指定在这种情况下是否建立新的连接,值为TRUE表示建立新的连接,值为FALSE时返回已经建立连接的句柄,默认值为FALSE。

PHP还提供了另外一个用于连接MySQL服务器的函数:mysql_pconnect()。该函数用于建立一个与MySQL服务器的持久连接。

2.选择数据库

连接到服务器后,可以选择需要使用的数据库,使用mysql_select_db()函数,语法格式如下:

bool mysql_select_db(string $database_name [, resource $ link_identifier ])

说明:$database_name参数为要选择的数据库名,可选参数$lin_identifier为一个连接标志符,如果没有指定,则使用上一个打开的连接。如果之前没有已经打开的连接,则本函数尝试调用一个无参数的mysql_connect()函数来打开一个连接并使用。本函数运行成功返回TRUE,否则返回FALSE。

3.关闭连接

当一个已经打开的连接不再需要时,可以使用mysql_close()函数将其关闭,语法格式如下:

bool mysql_close([ resource $link_identifier ])

可选参数$link_identifier为指定的连接标志符,如果省略,则关闭上一个打开的连接。

【真题227】以下代码的运行结果为(    )。

mysql_connect('localhost','root',"");

$result = mysql_query("SELECT id,name FROM tb1");

while($row = mysql_fetch_array($result,MySQL_ASSOC)){

echo' ID:' .$row[0].' Name:' .$row[];

}

?>

A.报错    B.循环换行打印全部记录

C.无任何结果 D.只打印第一条记录

参考答案:A。

分析:因为代码中没有指明要操作的数据库名,所以会报错。

所以,本题的答案为A。

问题:如何进行MySQL优化?

SQL优化

执行缓慢的SQL语句能消耗数据库的70%~90%的CPU资源,而SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低。SQL语句可以有不同的写法,下面分别介绍。

(1)在MySQL 5.5及其以下版本中避免使用子查询

例如,在MySQL 5.5版本里,若执行下面的SQL语句,则内部执行计划器是这样执行的:先查外表再匹配内表,而不是先查内表T2。所以,当外表的数据很大时,查询速度就会非常慢。

SELECT * FROM T1 WHERE ID IN (SELECT ID FROM T2 WHERE NAME='xiaomaimiao');

在MySQL 5.6版本里,采用JOIN关联方式对其进行了优化,这条SQL会自动转换为

SELECT T1.* FROM T1 JOIN T2 ON T1.ID = T2.ID;

需要注意的是,该优化只针对SELECT有效,对UPDATE或DELETE子查询无效,故生产环境应避免使用子查询。

(2)避免函数索引

例如,下面的SQL语句会走全表扫描:

SELECT * FROM T WHERE YEAR(D) >= 2016;

由于MySQL不像Oracle那样支持函数索引,即使D字段有索引,也会直接全表扫描。应改为如下的SQL语句:

SELECT * FROM T WHERE D >= '2016-01-01';

(3)用IN来替换OR

低效查询:

SELECT * FROM T WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

高效查询:

SELECT * FROM T WHERE LOC_IN IN (10,20,30);

(4)在LIKE中双百分号无法使用到索引

SELECT * FROM t WHERE name LIKE '%de%';

SELECT * FROM t WHERE name LIKE 'de%';

在以上SQL语句中,第一句SQL无法使用索引,而第二句可以使用索引。目前只有MySQL 5.7及以上版本支持全文索引。

(5)读取适当的记录LIMIT M,N

SELECT * FROM t WHERE 1;

SELECT * FROM t WHERE 1 LIMIT 10;

(6)避免数据类型不一致

SELECT * FROM T WHERE ID = '19';

由于以上SQL中ID为数值型,所以应该去掉过滤条件中数值19的双引号:

SELECT * FROM T WHERE ID = 19;

(7)分组统计可以禁止排序

SELECT GOODS_ID,COUNT(*) FROM T GROUP BY GOODS_ID;

默认情况下,MySQL会对所有GROUP BY col1,col2...的字段进行排序。如果查询包括GROUP BY,那么想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序,如下:

SELECT GOODS_ID,COUNT(*) FROM T GROUP BY GOODS_ID ORDER BY NULL;

(8)避免随机取记录

SELECT * FROM T1 WHERE 1=1 ORDER BY RAND() LIMIT 4;

由于MySQL不支持函数索引,所以以上SQL会导致全表扫描,可以修改为如下的SQL语句:

SELECT * FROM T1 WHERE ID >= CEIL(RAND()*1000) LIMIT 4;

(9)禁止不必要的ORDER BY排序

SELECT COUNT(1) FROM T1 JOIN T2 ON T1.ID = T2.ID WHERE 1 = 1 ORDER BY T1.ID DESC;

由于计算的是总量,所以没有必要去排序,可以去掉排序语句,如下:

SELECT COUNT(1) FROM T1 JOIN T2 ON T1.ID = T2.ID;

(10)尽量使用批量INSERT插入

下面的SQL语句可以使用批量插入:

INSERT INTO t (id, name) VALUES(1,'xiaolu');

INSERT INTO t (id, name) VALUES(2,'xiaobai');

INSERT INTO t (id, name) VALUES(3,'xiaomaimiao');

修改后的SQL语句:

INSERT INTO t (id, name) VALUES(1,'xiaolu'), (2,'xiaobai'),(3,'xiaomaimiao');

购买链接:京东购买

题目来自《PHP程序员面试笔试宝典》,里面涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书。

更多PHP面试笔试真题可以浏览:www.shuaiqi100.com

更多有趣有料的PHP面试笔试资料可以关注:“琉忆编程库”

或者浏览:www.shuaiqi100.com 获取。

PHP程序员面试笔试宝典下载:https://pan.baidu.com/s/1-ES2ZI3z5Lhv-zTKFmJDSQ

php mysql上机题_PHP+mysql真题相关推荐

  1. 计算机一级真题word,最新完整word版全国计算机等级考试一级操作题往年考试真题.docx...

    5 5 2019年全国计算机等级考试一级操作题(往年考试真题) 第一套 Windows基本操作题,不限制携作的方式 注意:下面岀现的细書垒文侔奂"均为心训EX/\本题型共有5外题 E将考生文 ...

  2. 牛客网题库公司真题 2021阅文C++方向笔试卷答案

    牛客网题库公司真题技术(软件)信息技术类 C++工程师 2021阅文C++方向笔试卷 以上的标题就是牛客网这个试卷的位置,链接在这里不确定以后是不是有效,我自己做个记录的:2021阅文C++方向笔试卷 ...

  3. 考研英语真题-四六级真题-计算机二级真题分享

    考研英语真题-四六级真题-计算机二级真题分享 准备的资料 给准备复习朋友准备了一堆资料,收集整理自网络,欢迎转发分享给你需要的朋友. 这次准备的资料分别有: •考研英语一和考研英语二,2009年至20 ...

  4. 2022年二级建造师考试-冲刺押题(历年真题+习题解析+模考试题+答案+知识点强化+文档总结),共2074份,32.2G(附件中为网盘链接)

    2022年二级建造师考试-冲刺押题(历年真题+习题解析+模考试题+答案+知识点强化+文档总结),共2074份,32.2G(附件中为网盘链接). 下载地址:https://download.csdn.n ...

  5. 计算机二级office题库加真题讲解视频!

    计算机二级office题库加真题视频 该题库包含98%的考试原题! 由天大教授张宁老师制作 模拟真实考场情景 链接:https://pan.baidu.com/s/1g64ateUNczsXiiD8H ...

  6. 真题园-最全的免费海量历年真题试卷下载及答案解析的真题题库网站,无需注册!找真题,上真题园!爱学习,找真题!

    真题园-www.zhentiyuan.com,网站全新上线,最全的免费海量历年真题试卷下载及答案解析的真题题库网站,无需注册!找真题,上真题园!爱学习,找真题! 真题园成立于2014年5月,是一个可以 ...

  7. MySQL基本操作—DQL实训真题

    文章目录 前言 ⛳️ 1.环境准备 ⛳️ 2.实训真题 2.1 select基本用法 2.2 聚合函数查询 2.3 分组聚合查询 2.4 多表连接查询 2.5 子查询 2.6 联合查询 总结 前言 S ...

  8. 人本原理内涵_叶澜教育学原理课后答案资料配套题库考研真题精选课后习题章节题库...

    叶澜<教育学原理>配套题库[考研真题精选+课后习题+章节题库] 第一部分 考研真题精选 一.单项选择题 二.名词解释题 三.辨析题 四.简答题 五.材料分析题 六.论述题 第二部分 课后习 ...

  9. 济南大学计算机专硕考研真题,济南大学考研真题各专业汇总

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2021年济南大学商学院<831经济学(宏观经济学50%+微观经济学50%)>网授精讲班(教材精讲+考研真题串讲) 2021年济南大学文学院& ...

最新文章

  1. MaxCompute - ODPS重装上阵 第二弹 - 新的基本数据类型与内建函数
  2. 【转载】Linux关机命令详解
  3. 人工智能支撑马赛克战机理研究
  4. FusionChartsFree调用json数据的简单例子
  5. 短信api的接口平台有哪些可以免费试用
  6. uniapp实现退出登录
  7. python-opencv尺寸测量
  8. Zabbix系列:proxy存储数据表proxy_history
  9. Ribo-seq的下游分析方法1-ORFquant以及RiboQC
  10. Aria2使用详细教程
  11. vue-awesome-swiper 传参控制滑动位置 滚动位置 slideTo 备注防止后期忘记
  12. html链接css代码link,CSS 链接(link)
  13. idea2017激活方式(亲测可用,良心推荐)
  14. 桌面应用程序 架构_关于该架构的全部内容:探索不同的架构模式以及如何在您的应用程序中使用它们
  15. 【花开朝颜复夕颜】—记火影中挚爱的女忍者
  16. 疯狂天才霍兹:17岁黑掉苹果,22岁搞垮索尼,还是特斯拉、谷歌最可怕的对手!
  17. DRAMA QUEEN_洪晃在ilook的BLOG
  18. 数据挖掘实验(二):主成分分析PCA R语言
  19. 说说我理解的互联网共享精神
  20. 产品访问量低该如何解决

热门文章

  1. Javascript Number.MIN_VALUE
  2. ruby 疑难点之—— attr_accessor attr_reader attr_writer
  3. kindEditor文本编辑器
  4. Intel HEX文件解析
  5. android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置
  6. LRU最少最近使用缓存策略
  7. Oracle Database 11g 数据库普通用户登录时提示 ORA-28002: the password will expire within 5 days
  8. use redis instance in docker hub
  9. 4.redis设计与实现--跳跃表
  10. [Tyvj模拟赛]运