尝试更改用户名时 MySQL 查询失败 [英] When trying to change username MySQL Query Fails
问题描述
我在数据库中有一些用户,我可以编辑他们的姓名和密码,但是当我尝试编辑用户名时,查询失败.
I have some users in the database and I can edit their names and passwords but when I try to edit the username the query fails.
这是我的代码
$user->username = $db->mysql_prep($_POST["username"]);
$user->hashed_password = ($_POST["password"]);
$user->firstname = $db->mysql_prep($_POST["firstname"]);
$user->lastname = $db->mysql_prep($_POST["lastname"]);
$user_query = $user->find_user_by_username($user->username);
$user->id = $user_query["id"];
$result = $user->change_user_by_id($user);
//->id,$user->username,$user->hashed_password,$user->firstname,$user->lastname
unset($user);
我的 change_user_by_id 方法:
My change_user_by_id method:
public function change_user_by_id($user){
global $db;
global $session;
$query = "UPDATE users SET ";
$query .= "username = '{$user->username}', ";
$query .= "first_name = '{$user->firstname}', ";
$query .= "last_name = '{$user->lastname}' ";
$query .= "WHERE id = {$user->id} ";
$query .= "LIMIT 1";
$result = mysqli_query($db->connection, $query);
$db->confirm_query($result);
if ($result && mysqli_affected_rows($db->connection) == 1) {
// Success
$session->message("User updated.");
redirect_to("list.php");
} else {
// Failure
$session->message("User update failed.");
}
}
还有我的 find_user_by_username 方法:
And my find_user_by_username method:
public static function find_user_by_username($username="default"){
global $db;
$query = "SELECT * ";
$query .= "FROM users ";
$query .= "WHERE username = '{$username}' ";
$query .= "LIMIT 1";
$user_set = mysqli_query($db->connection, $query);
$db->confirm_query($user_set);
if($user = mysqli_fetch_assoc($user_set)) {
return $user;
} else {
return null;
}
}
我得到的唯一错误是从 confirm_query 函数我得到消息数据库查询失败"这是函数:
The only error I get is from confirm_query function I get the message "Database query failed" Here is the function:
public function confirm_query($result_set) {
if (!$result_set) {
die("Database query failed.");
}
}
编辑 2:
添加了错误消息,这就是我得到的:
Added error messages and this is what I get:
您的 SQL 语法有错误;检查手册对应于您的 MySQL 服务器版本以使用正确的语法第 1 行的LIMIT 1"附近
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1
推荐答案
我发现是使用用户名获取 id 导致的,这意味着更改用户名意味着无法检索到 id.因此,我更改了代码并在表单中为 id 添加了一个隐藏字段.
I figured it out it was caused by using the username to get the id, which means changing the username meant no id could be retrieved. So I changed my code and added a hidden field for id in my form.
旧代码:
$user->username = $db->mysql_prep($_POST["username"]);
$user->hashed_password = ($_POST["password"]);
$user->firstname = $db->mysql_prep($_POST["firstname"]);
$user->lastname = $db->mysql_prep($_POST["lastname"]);
$user_query = $user->find_user_by_username($user->username);
$user->id = $user_query["id"];
$result = $user->change_user_by_id($user);
unset($user);
被新代码替换:
$user->username = $db->mysql_prep($_POST["username"]);
$user->hashed_password = ($_POST["password"]);
$user->first_name = $db->mysql_prep($_POST["first_name"]);
$user->last_name = $db->mysql_prep($_POST["last_name"]);
$user->id = $db->mysql_prep($_POST["id"]);
$result = $user->change_user_by_id($user);
unset($user);
这篇关于尝试更改用户名时 MySQL 查询失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!