很好的一道面試題

<?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,能回答上來的比較細心。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章