$ composer require shiwolang/db
Поддерживаются только MySQL и SQLite
DB::init([
'database_type' => 'mysql',
Yöntem adı: markdown
İlk dil: Çince
Son dil: Rusça
### Обновление данных (один столбец)
---------------------------------------
```php
$lastInsertId = DB::connection()->update("content", [
"title" => "title1",
"content" => "content1",
"time" => time()
],"id = :id", [":id" => 1]);
Обратите внимание, что значения ограничения должны быть типа int!
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all();
```DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
":title" => "title1",
":limit" => 10
])->all();
```sql
DB::connection()->query("SELECT * FROM content WHERE id = ? LIMIT ?", ["title1", 10])->all();
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all();
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->bindToClass(Content::class)->all();
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all(Content::class);
DB::connection()->query("SELECT * FROM content WHERE title = 'title1' LIMIT 10")->all(function($title, $content, $time) {
return [
"title" => $title,
"content" => $content,
"time" => date("Y-m-d H:i:s", $time)
];
});
Получение в виде массива
DB::connection()->query("SELECT * FROM content LIMIT 10")->each(function ($row) {
print_r($row);
});
Получение в виде коллекции объектов
DB::connection()->query("SELECT * FROM content LIMIT 10")->each(function ($row) {
print_r($row);
}, Content::class);
Получение в виде массива
DB::connection()->query("SELECT * FROM content LIMIT 10")->json();
Получение в виде коллекции объектов
DB::connection()->query("SELECT * FROM content LIMIT 10")->json($data, Content::className());
Внимание DB::json(&$fetchResult = null, $className = null, $args = []) Первый параметр — это возвращаемый набор результатов, а не имя связанного класса.
Примечание** При получении данных в виде объектного массива, данные автоматически форматируются. Можно использовать аннотацию @json
для аннотации одного общего метода внутри класса; ключ JSON будет иметь значение имени этого метода с маленькой буквы в начале (если метод начинается с get
, то эта часть игнорируется).Аналогичным образом можно реализовать интерфейсы ObjectContainerInterface
и \JsonSerializable
, и использовать Statement::setJsonObjectContainerClassName($jsonObjectContainerClassName)
для настройки контейнера объектного массива.
Эта функция зависит от функциональности транзакций данных
$db = DB::connection();
$db->beginTransaction();
try {
$last_insert_id = $db->insert("content", [
"title" => "title1",
"content" => "content1",
"time" => time()
]);
$db->commit();
} catch (\Exception $e) {
$db->rollBack();
throw $e;
}
$db = DB::connection();
$db->beginTransaction();
try {
<?php
try {
$last_insert_id = $db->insert("content", [
"title" => "title1",
"content" => "content1",
"time" => time()
]);
$db->commit();
} catch (\Exception $e) {
$db->rollBack();
throw $e;
}
$last_insert_id = $db->insert("content", [
"title" => "title2",
"content" => "content2",
"time" => time()
]);
$db->beginTransaction();
try {
$last_insert_id = $db->insert("content", [
"title" => "title3",
"content" => "content3",
"time" => time()
]);
$db->commit();
} catch (\Exception $e) {
$db->rollBack();
throw $e;
}
$db->commit();
} catch (\Exception $e) {
$db->rollBack();
throw $e;
}
?>
<?php
DB::connection()->transaction(function () use ($db) {
DB::connection()->transaction(function () use ($db) {
DB::connection()->insert("content", [
"title" => "title1",
"content" => "content1",
"time" => time()
]);
});
``````markdown
# Выполнение запроса на получение записей
-----------------------
#### Получение всех выполненных записей
```php
DB::connection()->query("SELECT * FROM content LIMIT 1")->all();
DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
":title" => "title1",
":limit" => 10
])->all();
print_r(DB::connection()->getLog());
$sql = DB::connection()->query("SELECT * FROM content WHERE title = :title LIMIT :limit", [
":title" => "title1",
":limit" => 10
], true);
Content
class Content
{
private $id;
private $title;
private $content;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getTitle()
{
return $this->title;
}
/**
* @param mixed $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* Для формата JSON
* @json
* @return mixed
*/
public function getContent()
{
return $this->content . "_привет";
}
/**
* @param mixed $content
*/
public function setContent($content)
{
$this->content = $content;
}
public function __get($name)
{
$getter = 'get' . self::camelName($name);
if (method_exists($this, $getter)) {
return $this->$getter();
}
throw new \Exception('Получение неизвестного свойства: ' . get_class($this) . '::' . $name);
}
public function __set($name, $value)
{
$setter = 'set' . self::camelName($name);
if (method_exists($this, $setter)) {
$this->$setter($value);
} else {
throw new \Exception('Установка неизвестного свойства: ' . get_class($this) . '::' . $name);
}
}
}
``````php
return;
}
throw new \Exception('Setting of unknown property: ' . get_class($this) . '::' . $name);
}
protected static function camelName($name, $ucfirst = true)
{
if (strpos($name, "_") !== false) {
$name = str_replace("_", " ", strtolower($name));
$name = ucwords($name);
$name = str_replace(" ", "", $name);
}
}
#### SQL-запрос для создания таблицы в базе данных
```sql
CREATE TABLE `content` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) DEFAULT NULL,
`content` VARCHAR(255) DEFAULT NULL,
`time` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )