Изменение значения MysQL с помощью PHP не с идентификатором пользователя, а с именем пользователя?

Я пытаюсь сделать простую форму, где вы помещаете user_id и т. Д. И т. Д., И это изменится в mysql, который работает довольно хорошо, но вопрос в том, могу ли я вместо users_ids использовать имена пользователей? Спасибо

if(isset($_POST['btn-change'])) {

$account = strip_tags($_POST['account']);
$value = strip_tags($_POST['value']);
$string = strip_tags($_POST['string']);

$account = $DBcon->real_escape_string($account);
$value = $DBcon->real_escape_string($value);
$string = $DBcon->real_escape_string($string);

$sql = "UPDATE tbl_users SET $value='$string' WHERE user_id=$account";

if ($DBcon->query($sql) === TRUE) {
$msg1 = '<div class="alert alert-success">
<i class="fa fa-info" aria-hidden="true"></i> &nbsp; Successfully changed !
</div>';
} else {
$msg1 = '<div class="alert alert-danger">
<i class="fa fa-info" aria-hidden="true"></i></span> &nbsp; Something went wrong !
</div>';
}

$DBcon->close();
}

-1

Решение

Исходное расширение MySQL было удалено в PHP7 и устарело в PHP 5.5.

Не пугайтесь PDO, хотя на самом деле это очень просто и намного лучше.

Требуйте этот код в начале любых файлов PHP, которые должны выполнять запросы к базе данных.

$host = "127.0.0.1";
$port = "3306";
$dbname = "NameOfTheDatabase";
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;";

$dbuser = "UsernameForDatabase";
$dbpass = "PasswordForDatabase";

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");

$database = new PDO($dsn, $dbuser, $dbpass, $options);

Обратите внимание, что это может быть улучшено радикально, но ради примера, мы будем держать вещи простыми. Обычно вы хотите загрузить эту информацию из защищенного файла конфигурации.

Теперь допустим, что мы хотим выбрать пользователя по его имени.

$statement = $database->prepare("SELECT user_id
FROM tbl_users
WHERE username LIKE :username
");

$statement->bindParam("username", $_POST['username'], PDO::PARAM_STR);

$statement->execute();

$result = $statement->fetch(PDO::FETCH_OBJ);

echo $result->user_id;

По сути, мы говорим PDO о сохранении запроса, который мы подготовили, в переменной $ Statement. Затем мы говорим это использовать bindParam () заменить или связать: имя пользователя с переменной POST (это позаботится о экранировании).

После выполнения оператора выполнить (), у нас есть два варианта. выборки () Функция по существу берет следующую (или в данном случае первую) возвращаемую строку и сохраняет ее в переменной $ result. После этого вы можете получить доступ к возвращенным столбцам, используя их имена, в данном случае $ result-> user_id. Однако, если вы, например, ВЫБИРАЕТЕ ранг, вы сможете получить к нему доступ с помощью $ result-> rank.

Второй вариант — это fetchAll () функция, которая работает практически так же, за исключением того, что она берет каждую возвращенную строку и сохраняет ее в массиве. Даже если возвращается только одна строка. Это означает, что вам нужно получить доступ к данным, используя $ result [0] -> user_id, где 0 — возвращаемая строка.

foreach($result as $row){
echo $row->user_id;
}

Или вы можете перебрать массив результатов, используя foreach, как указано выше. Одна из величайших особенностей PHP на мой взгляд.

Обновление и вставка работает почти так же, за исключением того, что функция execute не возвращает строки. Вместо этого возвращается количество строк, которые были изменены.

$statement = $database->prepare("UPDATE tbl_users
SET email = :email
WHERE user_id = :user_id
");

$statement->bindParam("email", $_POST['email'], PDO::PARAM_STR);
$statement->bindParam("user_id", $_POST['account'], PDO::PARAM_INT);

$statement->execute();

echo "Rows changed: ".$statement->rowCount();

В этом примере мы просто обновляем адрес электронной почты пользователя, используя переменную POST для электронной почты и переменную account для user_id. Обратите внимание, что я использовал PDO :: PARAM_INT для третьего параметра bindParam, это только потому, что user_id является целым числом. Обычно вы можете использовать PDO :: PARAM_STR, но это должно быть для строк.

Если вы хотите немного больше подробностей от кого-то, кто лучше объяснит, чем я, проверить это введение в PDO. Надеюсь, что это приведет вас на правильный путь!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]