UDN-企业互联网技术人气社区

板块导航

浏览  : 1359
回复  : 0

[面试技巧] 一道 PHP 笔试题,你敢挑战一下吗

[复制链接]
呵呵燕的头像 楼主
发表于 2015-11-22 19:16:25 | 显示全部楼层 |阅读模式
  请找出下面PHP代码中的问题,修复并优化它。

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

  8.     if (!$re_1 || !$re_2) {
  9.         $mysqli->query("INSERT INTO `demo` (`uname`, `email`) VALUES('$info['email']', '$info['uname']')");
  10.     }
  11. }
复制代码


  答案(在看答案之前,你想到了几点?)

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


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

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

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部