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