Не удается выполнить запись в базу данных mysql

#php #mysql

#php #mysql

Вопрос:

Я много лет работал с HTML, JS и CSS, и теперь мне нужно продолжить работу с MySQL (для чего я использую localhost phpMyAdmin) и PHP. Я пытаюсь отправить данные в свою базу данных. Но я не получаю ошибок и не знаю, что не так.
Вот мой register.php:

     <?php
    include('classes/db.php');
    
    if (isset($_POST['createaccount'])) {
      $username = $_POST['username'];
      $email = $_POST['email'];
      $password = $_POST['password'];
    
      db::query('INSERT INTO users VALUES ('', :username, :email, :password)', array(':username'=>$username, ':email'=>$email, ':password'=>$password));
      echo "Success!";
    }
    ?>
    
    <h1>REGISTER</h1>
    <form action="register.php" method="post">
      <input type="text" name"username" vlaue="" placeholder="Username">
      <input type="email" name"email" vlaue="" placeholder="E-Mail">
      <input type="password" name"password" vlaue="" placeholder="Password">
      <input type="submit" name"createaccount" vlaue="Register">
    </form>
  

И вот мой db.php , svaed под classes/db.php:

 <?php
class db {
  private static function connect() {
    //db inf, username, pwd
    $pdo = new PDO('mysql:host=127.0.0.1;dbname=emergencybase;charset=utf8', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $pdo;
  }

  public static function query($query, $params = array()) {
    $statement = self::connect()->prepare($query);
    $statement->execute($params);
    //$data = $statement->fetchAll();
    //return $data;
  }
}
  

Я не получаю ошибок, и в моей базе данных абсолютно ничего не отображается:
Пользователи базы данных:

введите описание изображения здесь

Надеюсь, кто-нибудь сможет мне в этом помочь.
~ Мариус 🙂

Комментарии:

1. Вы уверены, что не получаете ошибок при выполнении вашего запроса. Ваш запрос кажется неполным (отсутствуют закрывающая скобка и ограничитель).

2. @HellBringer419 да. Не в консоли в инструментах разработки и даже не где-либо на экране. Или есть дополнительная консоль для ошибок PHP?

3. Нет.. Я так не думаю. Я имею в виду, что есть еще один, но вы должны были получить предупреждение. Так что, вероятно, нет

4. Как упоминалось в ответе, name атрибуты отсутствуют = , плюс атрибут vlaue должен быть value .

Ответ №1:

  1. Неправильный синтаксис для name атрибутов. Это должно быть name="email" не name"email" , то же самое касается всех. Вы не получаете никакой ошибки, потому что код даже не выполняется, $_POST['createaccount'] не устанавливается.
  2. В вашем INSERT INTO запросе вы также должны указать имена столбцов, чтобы запрос стал INSERT INTO users (username, email, password) VALUES (:username, :email, :password) , предполагая, что у вас есть первичный ключ автоинкремента id в вашей таблице.

Комментарии:

1. Эй, спасибо за ваш ответ. Теперь это работает. Спасибо. Но у меня осталась одна проблема. В настоящее время мой запрос выглядит следующим образом: db::query('INSERT INTO users (id, username, email, password) VALUES ('', :username, :email, :password)', array(':username'=>$username, ':email'=>$email, ':password'=>$password)); Но когда я заглядываю в свою базу данных, поле id каждый раз равно 0. Это проблема, потому что каждому пользователю нужен уникальный идентификатор.

2. я предполагаю, что ваш идентификатор является целочисленным первичным ключом с автоматическим УВЕЛИЧЕНИЕМ. это означает, что вам не нужно включать его в свои запросы на вставку (что вы сейчас и делаете). Попробуйте это с точным запросом, который я предоставил, он должен работать и иметь увеличивающийся идентификатор, который уникален для каждого пользователя. Если вы используете другой тип идентификатора (скажем, UUID), вам придется сгенерировать его самостоятельно и включить в запрос.

3. Чем идентификатор всегда равен 0, как и раньше.

4. CREATE TABLE users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE ); попробуйте создать свою таблицу подобным образом и использовать мой запрос.

5. Спасибо, теперь это работает. Это была неправильная настройка таблицы. Последний вопрос: Знаете ли вы хорошую статью о создании UUID. Потому что логически я должен сначала получить все существующие идентификаторы, а затем создать UUID, чтобы убедиться, что дубликатов нет. И я думаю, что это займет много времени.