на тестовых данных отлаживай
// Подключение к базе данных
$dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8';
$username = 'root';
$password = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo 'Ошибка подключения: ' . $e->getMessage();
exit();
}
function selectOne($table, $params = []) {
global $pdo;
$sql = "SELECT * FROM $table";
if (!empty($params)) {
$i = 0;
foreach ($params as $key => $value) {
if (!is_numeric($value)) {
$value = "'" . $value . "'";
}
if ($i === 0) {
$sql = $sql . " WHERE $key = $value";
} else {
$sql = $sql . " AND $key = $value";
}
$i++;
}
}
$query = $pdo->prepare($sql);
$query->execute();
dbCheckError($query);
return $query->fetch();
}
function dbCheckError($query) {
$errInfo = $query->errorInfo();
if ($errInfo[0] !== PDO::ERR_NONE) {
echo $errInfo[2];
exit();
}
}
// Тестовые данные
$admin = 0; // 0 - не администратор, 1 - администратор
$login = 'test_user';
$email = 'test_user@example.com';
$pass = password_hash('password123', PASSWORD_BCRYPT); // Хэшируем пароль для безопасности
// Вставка пользователя
$insert_sql = "INSERT INTO `users` (`admin`, `user_name`, `email`, `password`) VALUES (?, ?, ?, ?)";
$query = $pdo->prepare($insert_sql);
$query->execute([$admin, $login, $email, $pass]);
dbCheckError($query);
// Получение последнего вставленного id
$user_id = $pdo->lastInsertId();
// Использование функции selectOne для получения данных о пользователе
$user = selectOne('users', ['id' => $user_id]);
// Вывод информации о пользователе для проверки
print_r($user);
?>
Делаю сайт по видео уроку. После занесения пользователя в таблицу выбирается его id и на этом далее строится сессия и кабинет.
Показали как сделать функцию по выбору строки, вот она:
function selectOne($table, $params = []){
global $pdo; $sql = "SELECT * FROM $table";
if (!empty($params)) { $i = 0;
foreach ($params as $key => $value) { if (!is_numeric($value))
{ $value = "'".$value."'";
} if ($i === 0) {
$sql = $sql . " WHERE $key = $value"; } else {
$sql = $sql . " AND $key = $value"; }
$i++; }
}
$query = $pdo->prepare($sql);
$query->execute(); dbCheckError($query);
return $query->fetch();}
Отдельно она вроде работала, по крайней мере проверки из видео сработали правильно.
но уже в момент регистрации пользователя вылетела ошибка.
$ser = "INSERT INTO `users` (`admin`, `user_name`, `email`, `password`) VALUES ('$admin', '$login', '$email', '$pass')";
$user = selectOne('users', ['id' => $ser]);
У других подобных ошибок не возникало. По-другому не получается переписать код и тут ничего не вижу