Вы можете сделать 'select' из таблицы 'users', чтобы заполнить users_products
, чтобы заставить пользователя существовать, чтобы запрос возвращал результаты. Это называется синтаксис "insert ... select" , и я думаю, что он является частью стандарта SQL, а также поддерживается в MySQL.
INSERT INTO users_products (username, barcode, count)
SELECT username, 'barcode', 'count'
FROM users
WHERE username = 'username' AND password = 'password';
Это выбирает username
столбец и некоторыестатически определенные поля из users
, а затем вставляет данные, включая статические значения, в users_products
. Количество вставленных строк скажет вам, совпадают ли имя пользователя и пароль.
'username'
, 'password'
, 'barcode'
и 'count'
предположительно предоставляются пользователем и должны быть интерполированы в подготовленный оператор, чтобы избежать уязвимости SQL-инъекций.
В реальном мире редко используют имя пользователя и пароль в качестве основного идентификатора сеанса пользователя. Обычно имя пользователя и пароль или другие учетные данные предоставляются при входе в систему, создается пользовательский сеанс, cookie-файл сеанса возвращается пользователю, и этот cookie-файл используется для ссылки на данные сеанса на стороне сервера. Более эффективно записывать данные такого типа в столбце с числовым идентификатором, чем в строке, и минимизировать пароль, передаваемый по сети. Конечно, я говорю это в неведении о том, что вы на самом деле делаете.
Другое дело: не храните пароли в виде простого текста. Вместо этого сохраните зашифрованную версию пароля и примените ту же самую крипту к любому предоставленному пользователем паролю для его проверки. Уязвимости SQL в базах данных, хранящих незашифрованные пароли, сегодня являются важной частью проблемы безопасности в сети.