Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в PHP и SQL

Том Котофеев Ученик (120), на голосовании 2 месяца назад
Вылетает ошибка.

Делаю сайт по видео уроку. После занесения пользователя в таблицу выбирается его 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]);

У других подобных ошибок не возникало. По-другому не получается переписать код и тут ничего не вижу
Голосование за лучший ответ
Александр Рогачёв Знаток (478) 3 месяца назад
Мне кажется дело в кавычках. И ещё, в поле "admin" вы передаёте '0' - это нормально?
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263838) 3 месяца назад
на тестовых данных отлаживай

 // Подключение к базе данных 
$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);
?>
AaacoB AaacМудрец (14157) 3 месяца назад
он скрины не умеет делать... а вы ему про отладку... эээ...
Том Котофеев Ученик (120) Ааабаев Аааб, и скрины и отладку я умею делать, не беспокойтесь)
Том КотофеевУченик (120) 3 месяца назад
Спасибо большое. lastInsertId добавил и всё заработало
Похожие вопросы