【发布时间】:2018-02-17 23:21:41
【问题描述】:
我正在尝试验证来自 3 个不同表的用户名,因为我有 3 种类型的用户,只有一个登录表单。没问题,它工作正常。但问题是如果用户名存在于其他表中怎么办。所以如果用户名已经存在,我必须使用 INNER JOIN 来验证 3 个表。
下面是验证用户 INNER JOIN 的用户名到 admin 和 staff 表的代码。
<?php
if(isset($_POST["username"]))
{
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
$mysqli = new mysqli('localhost' , 'root', '', 'db');
if ($mysqli->connect_error){
die('Could not connect to database!');
}
$username = filter_var($_POST["username"], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH);
$statement = $mysqli->prepare("SELECT users.username FROM users
INNER JOIN admin ON users.username = admin.username
INNER JOIN staff ON users.username = staff.username
WHERE username=?");
$statement->bind_param('s', $username);
$statement->execute();
$statement->bind_result($username);
if($statement->fetch()){
die('<p style="color: red; font-weight:bold">Username is already taken! Please write another username.</p>');
}else{
die('<p style="color: green; font-weight:bold">Username is available!</p>');
}
}
?>
这是JS中的脚本
<script type="text/javascript">
$(document).ready(function() {
var x_timer;
$("#username").keyup(function (e){
clearTimeout(x_timer);
var user_name = $(this).val();
x_timer = setTimeout(function(){
check_username_ajax(user_name);
}, 500);
});
function check_username_ajax(username){
$("#user-result").html('<img src="ajax-loader.gif" />');
$.post('validate_username.php', {'username':username}, function(data) {
$("#user-result").html(data);
});
}
});
</script>
但当我不将 INNER JOIN 仅用于用户表时,它可以工作。
那么我的 INNER JOIN 子句有什么问题吗? 感谢有人可以提供帮助。 提前致谢。
【问题讨论】:
标签: php mysql join pdo inner-join