一道php笔试题
来源:互联网 发布:招plc编程人 编辑:程序博客网 时间:2024/06/06 14:28
原文地址:http://www.walu.cc/php/a-bishiti.md
最近用的一道笔试题,推荐给大家。
问题
请找出下面代码中的问题,修复并优化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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了,之后再在面试中交流经验等方面。
我现在面试中都会出笔试,一般非常少,也很简单,就一道或两道。 很多时候这比面试更能反映问题。即便经验超级丰富,但没人想要也不想要一个连基本语法 都没掌握的人。
- 一道PHP笔试题
- 一道php笔试题
- gameloft一道笔试题
- google笔试题一道
- 网易一道笔试题!
- 一道迅雷笔试题
- 一道MSSQL笔试题
- 一道笔试题
- 一道java笔试题
- 一道笔试题
- 一道AutoDesk笔试题
- 网易笔试题一道
- 一道笔试题
- 一道C笔试题
- 一道笔试题
- 一道笔试程序设计题
- 网易一道笔试题!
- 一道c++笔试题
- 【数据结构之排序2】直接插入排序
- ios 天气接口的获取 json实现
- iperf
- 可执行文件的结构和加载
- 【Java工程师之路】[2-2.2]数据库设计和ER模型
- 一道php笔试题
- 如何执行一个mysql的sql脚本文件
- setbuf关闭流缓冲
- 类模板与模板类的概念
- Kobject Kset 解释 已及 相关注册函数API
- INF 文件
- How to Protect GRUB with Password in RHEL / CentOS / Fedora Linux
- host key verification failed --- Titanium开发 import from git失败
- 在filter中获取action的参数值