|
|
|
|
<?php
/* Небольшой класс для работы с MySQL */
class MySQL {
static public function init($db_host, $db_user, $db_name, $db_pass) {
$link = mysql_connect($db_host, $db_user, $db_pass);
if (!$link) {
die(mysql_error());
}
if (!mysql_select_db($db_name)) {
die(mysql_error());
}
return $link;
}
static public function query($query) {
$result = mysql_query($query);
if (!$result) {
die(mysql_error());
}
return $result;
}
// Аргументы: имя таблицы, ассоциативный массив, ключами которого являются
// названия колонок, а значениями данные
static public function insert($table_name, $params) {
$column_list = array_keys($params);
$values = array_values($params);
$q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
$result = self::query($q);
mysql_free_result($result);
}
static public function update($table_name, $params, $where) {
$items = array();
foreach ($params as $k => $v) {
$items[] = $k."=".$v;
}
$q = "update ".$table_name." set ".implode(",", $items)." where $where;";
$result = self::query($q);
mysql_free_result($result);
}
static public function delete($table_name, $where) {
$q = "delete from ".$table_name." where $where;";
$result = self::query($q);
mysql_free_result($result);
}
}
/*
* require 'classes/MySQL.php';
* $link = MySQL::init("localhost", "root", "database", "");
* MySQL::insert("users", array("id" => "NULL", "name" => "'test'", "pass" => "'test'"));
* mysql_close($link);
*/
?>
|
<?php
// по мне очень удобно
?>
|
| |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 12:25)
| | А какой смысл в этом? У вас, например, даже данные не обрабатываются.
То есть мне надо подумать о том, чтобы сначала обработать данные, а потом еще и в массив это все сложить и только тогда отдать обработчику.
Да и сложные запросы не напишешь.
Получается, я больше времени потрачу на то, чтобы составить правильный синтаксис для вашего класса, чем если бы я писал прямой запрос | |
|
|
|
|
|
|
|
для: neadekvat
(07.08.2010 в 12:31)
| | я думал по началу такое приделать но, ведь не всегда, не все и не везде нужно обрабатывать mysql_real_escape_string()
<?php
// ...
// можно конечно везде писать так
$q = "insert into table_name (col_name1, col_name2) values ($value1, $value2);";
$result = mysql_query($q);
if (!$result) {
die(mysql_error());
}
mysql_free_result($result);
// а вот по мне проще написать так
MySQL::insert("table_name", array("col_name1" => "$value1", "col_name2" => "$value2"));
|
В массив сложить. Так есть же готовый массив POST, так что складывать ничего не надо.
Я думал ещё select добавить, но у него слишком сложный синтаксис. А так можно любой запрос сделать через MySQL::query(); | |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 12:39)
| | Ну, вот у меня есть функция-обработчик, без класса. Она выводит на экран страницу дескать у нас ошибка, и кладет подробную информацию в логи.
А у вас тупо в die улетает. Разве это правильно? Тем более, класс делаете.
А с обработкой - что сложного то? Если число - (int), все остальное - mysql_real_escape_string() | |
|
|
|
|
|
|
|
для: neadekvat
(07.08.2010 в 13:04)
| | ну да а как быть например с разными SQL константами типа DEFAULT, CURRENT_TIMESTAMP, NULL | |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 13:13)
| | Ну, можно составить список констант и не обрабатывать их.
В противном случаи ваш класс совершенно теряет смысл. Он должен облегчать жизнь - а он просто предлагает альтернативу имеющейся рутины. Шило на мыло. | |
|
|
|
|
|
|
|
для: neadekvat
(07.08.2010 в 13:04)
| | Насчёт логов можно переписать вот так :
<?php
/* Небольшой класс для работы с MySQL */
class MySQL {
static public function init($db_host, $db_user, $db_name, $db_pass) {
$link = mysql_connect($db_host, $db_user, $db_pass);
if (!$link) {
die(mysql_error());
}
if (!mysql_select_db($db_name)) {
die(mysql_error());
}
return $link;
}
static public function query($query, $return_result = true, $log = false) {
$result = mysql_query($query);
if (!$result and $log) {
$f = fopen($log, "a+b");
flock($f, LOCK_EX);
fwrite($f, mysql_error()."\r\n");
flock($f, LOCK_UN);
fclose($f);
}
if ($return_result) {
return $result;
}
else {
mysql_free_result($result);
}
}
static public function insert($table_name, $params) {
$column_list = array_keys($params);
$values = array_values($params);
$q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
self::query($q, false);
}
static public function update($table_name, $params, $where) {
$items = array();
foreach ($params as $k => $v) {
$items[] = $k."=".$v;
}
$q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
self::query($q, false);
}
static public function delete($table_name, $where) {
$q = "delete from ".$table_name." where ".$where.";";
self::query($q, false);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 13:21)
| | Я бы советовал использовать file_put_contents, меньше кода. | |
|
|
|
|
|
|
|
для: neadekvat
(07.08.2010 в 13:23)
| | а там все равно ерунда написана чтобы журнал логов сделать придётся объект создавать чтобы сохранять настройки | |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 13:26)
| | Не понял мысли поста. | |
|
|
|
|
|
|
|
для: neadekvat
(07.08.2010 в 13:28)
| |
<?php
/* Небольшой класс для работы с MySQL */
class MySQL {
public $show_errors = false;
public $error_log = false;
public function init($db_host, $db_user, $db_name, $db_pass) {
$link = mysql_connect($db_host, $db_user, $db_pass);
if (!$link) {
die($this->error_handler());
}
if (!mysql_select_db($db_name)) {
die($this->error_handler());
}
return $link;
}
private function error_handler() {
if ($this->error_log) {
$f = fopen($this->error_log, "a+b");
flock($f, LOCK_EX);
fwrite($f, mysql_error()."\r\n");
flock($f, LOCK_UN);
fclose($f);
}
if ($this->show_errors == true) {
die(mysql_error());
}
}
public function query($query, $return_result = true) {
$result = mysql_query($query);
if (!$result) {
die($this->error_handler());
}
else if ($return_result) {
return $result;
}
else {
mysql_free_result($result);
}
}
public function insert($table_name, $params) {
$column_list = array_keys($params);
$values = array_values($params);
$q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
$this->query($q, false);
}
public function update($table_name, $params, $where) {
$items = array();
foreach ($params as $k => $v) {
$items[] = $k."=".$v;
}
$q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
$this->query($q, false);
}
public function delete($table_name, $where) {
$q = "delete from ".$table_name." where ".$where.";";
$this->query($q, false);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 13:31)
| | А словами сказать? Вы уже три раза код выложили - я его весь должен помнить, чтобы сравнить? | |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 13:31)
| |
<?php
/* Небольшой класс для работы с MySQL */
class MySQL {
public $link;
private $show_errors = true;
private $error_log = false;
private $q = false;
// $db = new MySQL($db_host, $db_user, $db_name, $db_pass);
public function __construct($db_host, $db_user, $db_name, $db_pass) {
$this->link = mysql_connect($db_host, $db_user, $db_pass);
if ($this->link === false) {
$this->error_handler();
}
if (mysql_select_db($db_name) === false) {
$this->error_handler();
}
}
// $db->display_errors(0); // отключить вывод ошибок
public function display_errors($bool) {
$this->show_errors = $bool;
}
// $db->error_log('mysql_errors.log'); // записываем сообщения об ошибках в журнал
public function error_log($filename) {
$this->error_log = $filename;
}
private function error_handler() {
if ($this->error_log) {
$error = mysql_error();
if ($this->q) {
$error.". Query: ".$this->q;
$this->q = false;
}
$f = fopen($this->error_log, "a+b");
flock($f, LOCK_EX);
fwrite($f, $error."\r\n");
flock($f, LOCK_UN);
fclose($f);
}
if ($this->show_errors == true) {
die(mysql_error());
}
}
// $result = $db->($query);
public function query($query, $return_result = true) {
$result = mysql_query($query);
if (!$result) {
if ($this->error_log !== false) {
$this->q = $query;
}
$this->error_handler();
}
else if ($return_result == true) {
return $result;
}
else {
mysql_free_result($result);
}
}
// $db->insert("users", array("id" => "NULL", "name" => "'test'", "password" => "'test'",));
public function insert($table_name, $params) {
$column_list = array_keys($params);
$values = array_values($params);
$q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
$this->query($q, false);
}
// $db->update("users", array("password" => "'new_password'",), "name = 'test'");
public function update($table_name, $params, $where) {
$items = array();
foreach ($params as $k => $v) {
$items[] = $k."=".$v;
}
$q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
$this->query($q, false);
}
// $db->delete("users", "name = 'test'")
public function delete($table_name, $where) {
$q = "delete from ".$table_name." where ".$where.";";
$this->query($q, false);
}
// unset($db);
// можно и так
// mysql_close($db->link);
public function __destruct() {
mysql_close($this->link);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 12:25)
| | Непонятно зачем тут класс. Всё равно он используется в процедурном стиле. | |
|
|
|
|
|
|
|
для: Саня
(07.08.2010 в 12:41)
| | чтобы избежать конфликта имён | |
|
|
|
|
|
|
|
для: Ури Геллер
(07.08.2010 в 12:25)
| | Есть такая штука - active record, позволяет избежать мешанины скл с похапе | |
|
|
|
|