文档章节

一道PHP笔试题

waveer
 waveer
发布于 2017/02/10 14:50
字数 442
阅读 43
收藏 0

最近用的一道笔试题,推荐给大家。

问题

请找出下面代码中的问题,修复并优化。

<?php
//批量注册用户,每次>100个。
//注册新用户,要求用户名与email不能与以前的重复。
$mysqli = new Mysqli($host, $user, $pass);
for ($i=0; $i<count($_POST['user_info']); $i++) {
    $info = $_POST['user_info'][$i];
     
    $re_1 = $mysqli->query("SELECT * FROM `demo` WHERE `uname`=$info['uname']");
    $re_2 = $mysqli->query("SELECT * FROM `demo` WHERE `email`=$info['email']");
     
    if (!$re_1 || !$re_2) {
        $mysqli->query("INSERT INTO `demo` (`uname`, `email`) VALUES('$info['email']', '$info['uname']')");
    }
}

答案

  • 基础:应该把count提到循环外。
  • 基础:在字符串中拼装数组时候应该用 { 与 } 括起来。
  • 基础:!$re_1 || $re_2应该是!$re_1 && !$re_2或者!($re_1 || $re_2)。
  • 基础:insert语句的values部分两个字段顺序错了。
  • 性能:uname与email两个语句应该拼装成一个OR语句。
  • 性能:应该把所有SELECT拼装一个Sql,然后去除冲突的,再把剩余的通过批量插入的方式通过一条Sql插入。
  • 性能:for应该该用foreach。
  • 安全:参数没有过滤,但回答htmlspecialchars\addslashes而非mysqli->real_escape_string的减分。
  • 其它:query前没有USE database之类的操作,没有SET NAMES,能回答上来的比较细心。
  • 其它:没有错误处理。

一般如果都能回答上来的话应该就是可以毕业的phper了,之后再在面试中交流经验等方面。

我现在面试中都会出笔试,一般非常少,也很简单,就一道或两道。 很多时候这比面试更能反映问题。即便经验超级丰富,但没人想要也不想要一个连基本语法 都没掌握的人。

如果大家有更好的经验,还望分享一二。

EOF

本文转载自:http://www.cunmou.com/php/a-bishiti.md

waveer
粉丝 0
博文 49
码字总数 5087
作品 0
深圳
程序员
私信 提问
18届清华硕士狂拿18家互联网公司offer

2018校招总结(外企,国内大公司,国内创业公司) 本篇是我参加2018春招实习和秋招的求职经历,除了笔试面试中遇到的一些问题,更多的是一些个人想法。 春招和秋招面了不少公司,实习offer有...

野梦M
2017/12/18
0
1
HR怎么从面试中了解程序员的真实水平?

HR肯定不懂或至少不太懂专业技术,这点,是一定的。 一个外行,怎么面试内行,很多求职者会很好奇。 其实,HR初试,更多的是看“人怎么样”,对“能力行不行”的观察,只是一个大概的情况,后...

明哥聊求职
2017/11/27
0
0
请教各位朋友们,django如何实现在线笔试系统

各位朋友们好,最近有在做在线笔试系统,在数据库里建立用户表,试卷表,用户笔试得分表,但是具体地如何在点击下一题显示下一道题目,在最后提交的时候,把结果进行提交,并如何评判笔试结果...

qingyuanlu
2015/09/28
194
0
一道算法笔试题,大家来看看

最近校园招聘比较火爆,参加了不少公司的笔试,昨天的网康笔试里有一道算法题,大家来看看怎么做: 大概是这样的:N个人围成一个圆圈,从某个人开始报数,报数为K的倍数的人退出这个圆圈,其...

YueZheng
2012/10/24
553
7
一个找规律的题目,小弟驽钝

77 49 36 () 8,括号内该填啥,一道笔试题,不得其解

Padding
2012/12/24
318
7

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
8
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部