Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762

Что лишнее и что не так в этом классе?

08.09.2012, 14:17. Показов 3591. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот написал свой первый класс.
Подскажите плиз, кто разбирается, что правильно, а что нет, что лишнее или не нужное и т.д
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
//////////////////////////////////////////////////////////////////////////////////////////////////////
/*                       Класс соединения с базой данных ConnectionBase                             */
/****************************************************************************************************/
/*Cоединение происходит автоматически при создании обьекта класса,                                  */
/*и разрывается при уничтожении обьекта.                                                            */
/*По умолчанию производится соединение на данных,                                                   */
/*которые находятся в константах класса HOST, LOGG, PASS, BASE.                                     */
/*Возможно соединение по заданым параметрам, которые передаются при создании обьекта :              */
/*$obj = new ConnectionBase("Хост","Логин","Пароль","База данных");.                                */
/*Ресурс инициализации соединения находится в свойстве обьекта con.                                 */
/*Разрыв соединения до уничтожения обьекта производится вызовом метода closing(obj->con).           */
/*Востаносление соединения после закрытия {метод closing()} производится методом connection().      */
/****************************************************************************************************/
class ConnectionBase {
    const HOST = "localhost";            
    const LOGG = "root";
    const PASS = "root";
    const BASE = "mysql";
    private $host;
    private $logg;
    private $pass;
    private $base;
    function __construct($h=false,$l=false,$p=false,$b=false){
        empty($h)?$this->host = self::HOST:$this->host = $h;
        empty($l)?$this->logg = self::LOGG:$this->logg = $l;
        empty($p)?$this->pass = self::PASS:$this->pass = $p;
        empty($b)?$this->base = self::BASE:$this->base = $b;
        self::connection();
    }
    public function connection(){   
        $conn = mysql_connect($this->host,$this->logg,$this->pass) or die('не удалось подключится к базе данных');
        $dbSelect = mysql_select_db($this->base,$conn) or die('не удалось выбрать базу');
        mysql_query("SET names 'utf8'");        //кодировка в которой будут приходить запросы
        $this->con = $conn; 
    }
    public function closing($conn){
        mysql_close($conn) or die("разрыв соединения с базой не удался");
        unset($this->con);
    }
    function __destruct(){
        if(isset($this->con))
            self::closing($this->con);
    }
}
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2012, 14:17
Ответы с готовыми решениями:

После удаления компонента ComboBox выдает сообщение, что с ним что-то не так, хотя его нигде в этом файле нет
Unresolved external '__fastcall TForm_Vse::ComboBox_DolgnostChange(System::TObject *)' referenced from D:\U1.OBJ После удаления...

что в этом выражении не так?
вот собственно и сам код: $id=$_GET; $auth=$_GET; $get5 =...

Что не так в этом запросе?
Выводит такую ошибку: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right...

23
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
10.09.2012, 19:04
Студворк — интернет-сервис помощи студентам
PHP
1
...selectArray
никаких selectArray. Обертка под БД должна иметь только один основной метод - query и использовать плейсхолдеры. возвращать результат в виде объекта.
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
11.09.2012, 08:12  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
PHP
1
...selectArray
никаких selectArray. Обертка под БД должна иметь только один основной метод - query и использовать плейсхолдеры. возвращать результат в виде объекта.
пока с обьектом что то не выходит, во всяком случае в этом классе, так как здесь обьект сразу получает коннект к базе, но можно вернуть в виде свойства обьекта.
И решил лучше запросы в mysqli делать , пора уже забывать о mysql, немного получше с ним разберусь, как с классами работать, julf и обьект вернуть проблем никаких небудет.
Вот что получилось, но есть трабл если placeholder идет в виде строки с кавычками и запятыми, но если с запятыми просто нужно придумать другой разделитель, а вот как быть с кавычками, что то в голову не приходит, но если посылать placeholder в массиве , то вроде все нормально получается,
или placeholder обычно в массиве отсылается?
Vovan-VE вчерашние ошибки поисправлял кажется
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
error_reporting(E_ALL);
header('content-type:text/html;charset=utf-8');
ini_set('magic_quotes_gpc', 0);
/** **************************************************************************************************/
/*                       Класс соединения с базой данных ConnectionBase                              */
/** **************************************************************************************************/
 
class ConnectionBase{
/** @var resource     ресурс соединения с СУБД/исп. connection(), closing(), __destruct(), query(), sprinter()*/    
    private $connect;
/** @var string       хост по умолчанию/исп. __construct(), connection()*/                      
    private $base = "street";
/** @var string       хост по умолчанию/исп. __construct(), connection()*/              
    private $host = "localhost";
/** @var string       логин по умолчанию/исп. __construct(), connection()*/           
    private $logg = "joomla";
/** @var string       пароль по умолчанию/исп. __construct(), connection()*/              
    private $pass = "joomla";
/** @var string       кодировка соединения с СУБД/исп. connection()*/              
    private $ccod = 'utf8';            
/** @var object       результат метода query()/исп. query() */
    public $obj;
        
/** метод __construct() проверяет наличие переданых данных*/     
    function __construct($base = ' ', $host = ' ', $login = ' ', $pass = ' ', $charset = ' '){
        
        if (trim($base))     $this->base = $base;
        if (trim($host))     $this->host = $host;
        if (trim($login))    $this->logg = $login;
        if (trim($pass))     $this->pass = $pass;
        if (trim($charset))  $this->ccod = $charset;
        $this->connection();
    }
 
/** метод connection() инициализирует соединение с СУБД  */
 
    private function connection(){
        
        if (!$this->connect = mysqli_connect($this->host, $this->logg, $this->pass, $this->base))
            throw new Exception('не удалось подключится к базе данных.Ошибка: '.mysqli_connect_error($this->connect));
        mysqli_set_charset($this->connect, $this->ccod);
    }
 
/** метод sprinter() возвращает отформатированную строку для метода query() */
    private function sprinter($sql, $values){
        if(is_array($values))       //для placeholder в массиве
            $formatArray = $values;
        else                        //для placeholder в строке
            $formatArray = explode(",", $values); // BUG: с кавычками или запятыми
        for($i = 0, $cnt = count($formatArray) ; $i < $cnt; $i++)
            $formatArray[$i] = mysqli_real_escape_string(strip_tags($this->connect, $formatArray[$i]));
        $format = vsprintf($sql, $formatArray);
        return $format;
    }   
 
/** метод query() производит запрос к СУБД по SQL-запросу или SQL-запрос с placeholder(в строке или в массиве)
 *  и возвращает результат в виде булевого значения, свойства обьекта или массива 
 */
    public function query($sql, $values = false, $obj = false){
        
        if($values)
            $sql = $this->sprinter($sql, $values);
        if(!$resource = mysqli_query($this->connect,$sql))
            throw new Exception('Ошибка запроса: '.mysqli_error($this->connect));
        if($resource === false or $resource === true)
            return $resource;                        //возрат булевого значения для запросов типа INSERT...
        $arr = array();
        while($res = mysqli_fetch_assoc($resource))
            $arr[] = $res;
        if($obj)
            return $this->obj = $arr;                //возврат в виде свойства обьекта
        return $arr;                                 //возрат в виде массива
    }
    
/** метод closing() закрывает соединение с СУБД*/
    private function closing(){
        
        mysqli_close($this->connect);            
    }
    
/** метод __destruct проверяет наличие соединения с СУБД и вызывает метод closing()*/    
    function __destruct(){
        
        if(!empty($this->connect))
            $this->closing();
    }
}
 
try{
$d=new ConnectionBase();
$q = $d->query("INSERT INTO `rating` (`user`, `points`, `idrate`, `tablerate`) 
                VALUES ('%d', '%d', '%d', '%s')", "123, 4, 1455, ../video/Nissan GT-R AMS Alpha.webm");
var_dump($q); 
$s = "INSERT INTO `rating` (`user`, `points`, `idrate`, `tablerate`) VALUES ('%d', '%d', '%.2f', '%s')";
$v = "{123, 4, 14.55, fgh/fhf-gff'ghgh}";
$q = $d->query($s, $v);
var_dump($q);
$q = $d->query("SELECT * FROM `main`");
var_dump($q); 
}catch(Exception $e){
echo $e->getMessage();
echo $e->getLine();}
0
 Аватар для Vovan-VE
13210 / 6601 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
11.09.2012, 17:08
alpex, Зачем передавать параметры в виде «строки,с,кучей,хлама», чтобы там внутри она порезалась по запятым, когда можно (и это удобнее) сразу передать массив параметров?
1
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
11.09.2012, 19:33  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
alpex, Зачем передавать параметры в виде «строки,с,кучей,хлама», чтобы там внутри она порезалась по запятым, когда можно (и это удобнее) сразу передать массив параметров?
да вот и я так думаю что в массиве удобнее и проще все получается, просто не знал как правильно должно быть, выброшу эти строки отсюда, ведь особой разницы то и нет, что заносить данные в переменные или в массив, в массиве даже удобнее.
Vovan-VE спасибо за помощь, благодаря Вам стал получше разбираться, что делаю
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2012, 19:33

Что не так в этом решении?
Сразу скажу что не люблю и нет желания изучать ассемблер! Но препод требует... Кое как сделал решение Но препод блин увидел ошибку и...

Что не так в этом коде?
Помогите решить проблему: #include &lt;stdio.h&gt; main() { int age printf(&quot;Возраст&quot;); scanf(&quot; %d&quot;, &amp;age); return...

что не так в этом коде
public abstract class Digest { private Map&lt;byte, byte&gt; cache = new HashMap&lt;byte, byte&gt;(); public byte digest(byte input) { byte...

Что не так в этом скрипте
Аваст его определяет как вирус хотя это кнопка &lt;!--Money counter--&gt;&lt;script type=&quot;text/javascript&quot;&gt;&lt;!-- ...

Что не так в этом коде!
Что не так в этом куске кода? Укажите на все ошибки и слабые места. &lt;? $result = mysql_query(&quot; SELECT * FROM users ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru