Вот мой код. У меня возникла ошибка, и я новичок в PHP. Я делаю проект, в котором мне нужно получить вводимые значения и отобразить их в таблице HTML. Не могли бы вы порекомендовать мне хороший способ решить эту ошибку.
Ошибка: INSERT INTO levels (level, maxTotal, minTotal, steps) VALUES ('one', 'восемь', 'two', 'three') Повторяющаяся запись 'one' для ключевого 'level'. Примечание. Попытка получить свойство non -объект в H: \ webdev3 \ www \ try2 \ dashBoard.php в строке 7 0 результатов
{
public $host;
public $username;
public $password;
public $dab;
public $conn;
public function dbConnect()
{
$this->conn = mysqli_connect($this->host, $this->username, $this->password);
if (!$this->conn) {
die("Connection failed: " . mysqli_connect_error());
} else {
//echo "Connected successfully to server";
}
$db_selected = mysqli_select_db($this->conn, $this->dab);
if (!$db_selected) {
// if the given database doesn't exists
// creates new database with that name
$db_sql = 'CREATE DATABASE userLogin';
// verify the database is created
if (mysqli_query($this->conn, $db_sql)) {
echo "Database userlogin already exists or created successfully\n";
} else {
echo 'Error creating database: ' . mysqli_error() . "\n";
}
}
// creating tables
$table_sql = "CREATE TABLE IF NOT EXISTS users (" . "uid INT PRIMARY KEY AUTO_INCREMENT," . "username VARCHAR(30) UNIQUE," . "password VARCHAR(50)," . "name VARCHAR(100)," . "email VARCHAR(70) UNIQUE); ";
$table_sql = "CREATE TABLE IF NOT EXISTS levels (" . "uid INT PRIMARY KEY AUTO_INCREMENT," . "level VARCHAR(30) UNIQUE," . "maxTotal VARCHAR(50)," . "minTotal VARCHAR(100)," . "steps VARCHAR(70) UNIQUE); ";
$sql = "INSERT INTO levels (level, maxTotal,minTotal,steps) VALUES ('one', 'eight', 'two','three')";
// verify the table is created
if (mysqli_query($this->conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($this->conn);
}
if (mysqli_query($this->conn, $table_sql)) {
// echo "Table: users already exists or created successfully\n";
} else {
echo 'Error creating table: ' . mysqli_error($table_sql) . "\n";
}
}
}
$obj = new dbConfig();
$obj->host = 'localhost';
$obj->username = 'root';
$obj->password = '';
$obj->dab = 'user';
$obj->dbConnect();
2 ответа
Если проблема, которую вы получаете, является проблемой, вы можете решить ее, удалив "UNIQUE" при создании таблицы, или изменив "INSERT INTO ..." на "INSERT IGNORE INTO ..." или не пытаясь вставить повторяющееся значение в уникальное поле.
Если вы пытаетесь обработать такую ошибку, если пользователь отправил проблему, вы можете вложить вызов вставки в оператор try / catch, где вы сможете обработать ошибку изящным образом.
Я недостаточно знаю ваше конкретное приложение или требования, чтобы понять, чего вы действительно хотите. Если вы немного подробнее расскажете о желаемом результате, я уверен, что смогу дать вам лучший ответ.
Проблема в том, что у вас есть уникальный ключ, а данные явно уже есть в этой таблице. Я заметил, что ваш код пытается добавить данные в таблицу до того, как он попытается ее создать, поэтому вам, вероятно, также следует исправить это. И, благодаря перезаписи оператора создания таблицы, невозможно создать таблицу пользователей.
Мой совет: повторите описанное выше, чтобы последовательно и правильно обрабатывать различные случаи, когда БД или таблицы не существуют или в них нет данных. На самом базовом уровне вы можете безоговорочно выполнить CREATE IF NOT EXISTS и INSERT IGNORE. Это, безусловно, несколько упростило бы ваш код.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
SELECT COUNT(*) FROM userLogin.levels
user
. Но затем в коде, если select_db не работает, тогда база данных создания используетuserLogin
в качестве имени базы данных.