gpt4 book ai didi

php - 使用 MySQLi 检查用户名是否已存在

转载 作者:行者123 更新时间:2023-11-29 08:31:44 25 4
gpt4 key购买 nike

在创建新用户之前,我尝试检查输入字段中的用户名和电子邮件是否已存在于我的数据库中。

这是登录.php:

<?php
session_start();
$pseudo = $_POST['pseudo'];
$mail = $_POST['mail'];

$pseudo=mysql_real_escape_string($pseudo);
$pseudo=ltrim($pseudo);
$pseudo=rtrim($pseudo);

$mail=mysql_real_escape_string($mail);
$mail=trim($mail);

$sql=mysqli_connect('localhost','root','','bdd_name');
$query=("SELECT COUNT(*) FROM t_people WHERE 'PEO_PSEUDO'='".$pseudo."' OR 'PEO_MAIL'='".$mail."'");
$result = mysqli_prepare($sql,$query);

mysqli_stmt_execute($result);
mysqli_stmt_store_result($result);

if (mysqli_stmt_num_rows($result) == 0) {
echo 1;
}
else {
echo 2;
}
mysqli_stmt_free_result($result);
mysqli_stmt_close($result);
?>

这是我的 JavaScript 的一部分:

var pseudo=$("#pseudo").val();
var mail=$("#mail").val();
$.ajax({
type: "POST",
url: "login.php",
data: {pseudo:pseudo, mail:mail}
}).done(function(result) {
if (result==1) {
good();
}
else if (result==2) {
bad();
}
});

谁能告诉我这有什么问题吗?

我已经研究了几个小时了,但我一无所知......

最佳答案

有些事情出了问题。不要使用mysql_real_escape_string,因为您正在使用mysqli_*。使用mysqli_real_escape_string代替。但最好使用 mysqli_stmt_bind_param ,因为您正在使用准备好的语句。如果您使用 COUNT(*),您总是会得到 1 行。

$pseudo = $_POST['pseudo'];
$mail = $_POST['mail'];

$query = "SELECT * FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ? LIMIT 1";
$stmt = mysqli_prepare($sql, $query);
mysqli_stmt_bind_param($stmt, 'ss', $pseudo, $mail);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$numRows = mysqli_stmt_num_rows($stmt);
mysqli_stmt_close($stmt);

使用 COUNT(*) (效率更高),如下所示:

$query = "SELECT COUNT(*) as numrows FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ?";
...
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $numRows);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);

// work with $numRows

关于php - 使用 MySQLi 检查用户名是否已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com