php: класс базы данных с PDO. Как я могу сделать это лучше?

Поэтому я начал немного больше практиковаться в php и хочу создать объектно-ориентированный форум. Поэтому я хочу иметь класс базы данных, такой как:

<?php

class Database {

public $databaseConnection;

function __construct(){
$this->databaseConnection = new PDO('sqlite:test.sq3', 0, 0);
$this->databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$params = NULL;
$pdoStatement = $this->databaseConnection->prepare('CREATE TABLE IF NOT EXISTS user(
id INTEGER PRIMARY KEY,
username VARCHAR(40) NOT NULL UNIQUE,
numberoflogins INTEGER DEFAULT 0,
bannedstatus BOOLEAN DEFAULT FALSE,
dateofjoining TIME
)');
$pdoStatement->execute(array_values((array) $params));
}

function query($sql, $params = NULL){
$s = $this->databaseConnection->prepare($sql);
$s->execute(array_values((array) $params));
return $s;
}

function insert($table, $data){
self::query("INSERT INTO $table(" . join(',', array_keys($data)) . ')VALUES('. str_repeat('?,', count($data)-1). '?)', $data);
return $this->databaseConnection->lastInsertId();
}
}

Затем я делаю это в том же сценарии:

$database = new Database();


$database->insert('user',array( 'id' => 0,
'username' => 'gulaschsuppe',
'numberoflogins' => 23,
'bannedstatus' => TRUE,
'dateofjoining' => time()));

$searchID = 0;

$userData = $database->query('SELECT username FROM user WHERE id = 0');

$username = $userData->fetchAll();

print_r(array_values($username));

?>

Я просто хотел посмотреть, как все работает. Самая важная часть кода — это класс. Мне нужно было немного времени, чтобы понять, как я получаю нужную информацию. Это то, что я получаю.

Array ( [0] => Array ( [username] => gulaschsuppe [0] => gulaschsuppe ) )

Все работает, но я не думаю, что это лучший способ получить информацию. Я получаю массив с массивом. Кроме того, теперь нет проверки, но сначала я хочу сосредоточиться на функции запроса и вставки.

Итак, можете ли вы объяснить, как последняя часть с именем пользователя => g. [0] => ж. произошло?
Я хотел бы знать, как я могу улучшить функции, и, пожалуйста, скажите мне, когда я делаю что-то совершенно не так.

-1

Решение

Array (
[0] => Array (
[username] => gulaschsuppe
[0] => gulaschsuppe
)
)

Вы получаете результат с обоими столбцами имен (так что вы могли бы сделать $row['username']) и численно (так что вы можете сделать $row[0]). Это поведение PDO по умолчанию. Вам нужно использовать PDO :: FETCH_ * константы для того, чтобы изменить извлеченные результаты. PDO::FETCH_BOTH это значение по умолчанию.

Вы можете установить его при получении:

$username = $userData->fetchAll(PDO::FETCH_ASSOC);

Или глобально в какой-то момент:

$this->databaseConnection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

Если вам нужен только один столбец, вы можете использовать этот режим извлечения:

$usernames = $userData->fetchAll(PDO::FETCH_COLUMN);
// $usernames = array('gulaschsuppe');

Это выбирает только один столбец для каждой строки, без переноса каждого результата в другой массив (столбец 0 выбирается по умолчанию).

Увидеть PDOStatement::fetch() документация для более подробной информации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]