使用PHP/MySQLi查询返回错误结果的Ajax调用
我正在尝试检查数据库中是否已经存在输入值 到目前为止,我得到了以下信息,但这总是返回“无效”(即使我输入了匹配值),因此我猜测我的SELECT查询后的部分或if Else逻辑中有错误 有人能告诉我怎么做吗 我的JS:使用PHP/MySQLi查询返回错误结果的Ajax调用,php,mysql,select,mysqli,Php,Mysql,Select,Mysqli,我正在尝试检查数据库中是否已经存在输入值 到目前为止,我得到了以下信息,但这总是返回“无效”(即使我输入了匹配值),因此我猜测我的SELECT查询后的部分或if Else逻辑中有错误 有人能告诉我怎么做吗 我的JS: $('#btnCheck').click(function() { var username = $('#username').val(); $.ajax({ url: 'userSubmit.php', type: 'POS
$('#btnCheck').click(function() {
var username = $('#username').val();
$.ajax({
url: 'userSubmit.php',
type: 'POST',
data: {username: username},
success: function(response){
if(response == 'valid') {
alert('Valid');
} else {
alert('Invalid');
}
}
});
});
$username = $_POST['username'];
$conn = new mysqli($host, $username, $password, $database);
if($conn->connect_error) {
die("Connection Error: " . $conn->connect_error);
}
$stmt = $conn->prepare("SELECT username FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
if($stmt->num_rows > 0) {
echo "valid";
} else {
echo "invalid";
}
我的PHP:
$('#btnCheck').click(function() {
var username = $('#username').val();
$.ajax({
url: 'userSubmit.php',
type: 'POST',
data: {username: username},
success: function(response){
if(response == 'valid') {
alert('Valid');
} else {
alert('Invalid');
}
}
});
});
$username = $_POST['username'];
$conn = new mysqli($host, $username, $password, $database);
if($conn->connect_error) {
die("Connection Error: " . $conn->connect_error);
}
$stmt = $conn->prepare("SELECT username FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
if($stmt->num_rows > 0) {
echo "valid";
} else {
echo "invalid";
}
您需要调用
store_result()
,以便在调用num_rows
之前实际记录行数:
...
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) {
...
必须调用store\u result()
的原因是,如果没有此函数,则不会实际获取任何结果,因此行数(num\u rows
)将为0
有关num_行
,请参考官方文档:
...
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) {
...
返回结果集中的行数。使用
mysqli_stmt_num_rows()取决于是否使用
mysqli_stmt_store_result(),用于在
语句句柄
此链接是。在调用
num\u rows
之前,您需要调用store\u result()
,以便实际记录行数:
...
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) {
...
必须调用store\u result()
的原因是,如果没有此函数,则不会实际获取任何结果,因此行数(num\u rows
)将为0
有关num_行
,请参考官方文档:
...
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) {
...
返回结果集中的行数。使用
mysqli_stmt_num_rows()取决于是否使用
mysqli_stmt_store_result(),用于在
语句句柄
有一个链接是。没有理由使用
num_rows
,这不仅容易混淆、误用,而且如果误用还会导致性能问题
只需获取COUNT(1)
,然后从SQL结果的第一行获取一列
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($host, $username, $password, $database);
$conn->set_charset('utf8mb4');
$stmt = $conn->prepare("SELECT COUNT(1) FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$exists = $stmt->get_result()->fetch_row()[0];
if($exists) {
echo "valid";
} else {
echo "invalid";
}
如果您出于某种奇怪的原因想要坚持使用
num\u rows
,则必须在语句上调用store\u result()
,然后从语句中获取num\u rows
,或者调用get\u result()
并读取返回结果集中num\u rows
的值 没有理由使用num_rows
,这不仅容易混淆、误用,而且如果误用还会导致性能问题
只需获取COUNT(1)
,然后从SQL结果的第一行获取一列
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($host, $username, $password, $database);
$conn->set_charset('utf8mb4');
$stmt = $conn->prepare("SELECT COUNT(1) FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$exists = $stmt->get_result()->fetch_row()[0];
if($exists) {
echo "valid";
} else {
echo "invalid";
}
如果您出于某种奇怪的原因想要坚持使用
num\u rows
,则必须在语句上调用store\u result()
,然后从语句中获取num\u rows
,或者调用get\u result()
并读取返回结果集中num\u rows
的值 $stmt->num_rows
的实际值是多少?您是否在浏览器的开发工具中查看了请求/响应以查看实际返回的内容?使用die($conn->connect_error)是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。更多解释请参见本文:关于您最近的问题的最后一点说明。在阵列上不使用while。使用fetch\u,您必须使用foreach,$stmt->num\u rows
的实际值是多少?您是否在浏览器的开发工具中查看请求/响应以查看实际返回的内容?使用die($conn->connect\u error)是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。更多解释请参见本文:关于您最近的问题的最后一点说明。在阵列上不使用while。有了fetch_,你就可以用foreach了,非常感谢。这正是我们所缺少的!还有一个问题:它仍然无法识别我的结果,因为它似乎在我在PHP中回显的文本前面包含一个符号(“有效”/“无效”)。当我在JQuery中提醒它时,它会在我的文本前面显示这个符号。我怎样才能摆脱这个问题,使结果只是我的文本?@keewee279关于你的另一个问题,我认为这可能值得单独提问。但是,如果在PHP代码中没有echo
,那么在返回值之前出现一个符号\字符将非常奇怪。请确保在你的新问题中包括一个例子。根据我之前的评论,它仍然返回无效。我现在只在提示结果时看到一个difference,但在其他情况下仍然对任何值无效。@keewee279这很奇怪。您是否尝试过在PHP中转储num_rows
的值以查看它包含的内容?如果用户名匹配,SQL语句应该至少返回1行。我似乎必须修剪输出,不知道为什么,但它可以与您的解决方案一起工作,所以我现在就接受它。再次感谢你的帮助!谢谢。这正是我们所缺少的!还有一个问题:它仍然无法识别我的结果,因为它似乎在我在PHP中回显的文本前面包含一个符号(“有效”/“无效”)。当我在JQuery中提醒它时,它会在我的文本前面显示这个符号。我怎样才能摆脱这个问题,使结果只是我的文本?@keewee279关于你的另一个问题,我认为这可能值得单独提问。但是,如果在PHP代码中没有echo
,那么在返回值之前出现一个符号\字符将非常奇怪。请确保在你的新问题中包括一个例子。根据我之前的评论,它仍然返回无效。我现在只在提示结果时看到一个difference,但在其他情况下仍然对任何值无效。@keewee279这很奇怪。您是否尝试过在PHP中转储num_rows
的值以查看它包含的内容?如果用户名匹配,SQL语句应该至少返回1行。我似乎必须修剪输出,不知道为什么,但它可以工作