Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/50: Рейтинг темы: голосов - 50, средняя оценка - 4.66
edelveys
2 / 2 / 0
Регистрация: 28.05.2010
Сообщений: 63
1

Как сделать красиво и правильно? ООП + PHP + MySQL

04.05.2011, 04:32. Просмотров 9350. Ответов 8
Метки нет (Все метки)

В одной из функций класса производится подключение к БД.

Возможно ли реализовать что-то подобное:
PHP
1
2
3
4
   define('DBSERVER', 'localhost'); //Сервер БД.
   define('DBUSER', 'root'); //Пользователь БД
   define('DBPASSWORD', '123'); //Пароль БД
   define('DATABASE', 'ourbase'); //Название базы

или
PHP
1
2
3
4
$host = "localhost";   // имя или ip-адрес сервера MySQL 
$user = "user_name";   // имя пользователя, под которым вы можете работать с базой данных 
$pass = "password";    // пароль для доступа к БД 
$db   = "test_db";     // имя базы данных к которой подключаемся
?

То есть, чтобы не нужно искать функцию подключения и менять там параметры.

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
<?php
header('Content-Type: text/html; charset=utf-8');
 
 
class Test {
    static $counter = 0;
    public function __construct()
    {
        Test :: $counter++;
    }
    function __destruct()
    {
        //parent :: __destruct();
        Test :: $counter--;
    }
 
 
 
public function dbConnect ()
    {
    //$connect = mysql_connect($host, $user, $password) or die("Ошибка соединения с сервером");
    //$connect = mysql_connect('DBSERVER', 'DBUSER', 'DBPASSWORD') or die("Ошибка соединения с сервером");
    $connect = mysql_connect('localhost', 'root', '123') or die("Ошибка соединения с сервером");
    $query = "CREATE DATABASE IF NOT EXISTS ourbase";
    $result = mysql_query($query) or die("Ошибка создания БД");
    $db = mysql_select_db("ourbase", $connect) or die("База данных не выбрана");
    echo "База данных создана"; 
    // создание таблицы 
    $query = "CREATE  TABLE IF NOT EXISTS test2 ( 
    ID int primary key AUTO_INCREMENT, 
    name  varchar(100), 
    INDEX (ID))";
    mysql_query($query) or die(mysql_errno() .":". mysql_error() ." Ошибка создания таблицы test");
    //mysql_close($connect);
}
 
 
 
}
 
    
    $name = 'Den';
    $obj1 = new Test($name);
 
    $name = 'Tim';
    $obj2 = new Test($name);
 
    echo Test::$counter;
 
 
?>
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 04:32
Ответы с готовыми решениями:

Как сделать правильно ? mysql и php
Кто может исправьте ошибки - что то не хвататет ) задолбался говорит ошибка в 14 строке да и не...

Как правильно связать сайт с PHP+MYSQL?
Привет всем, почти закончила свою первую верстку в HTML, на данный момент готово уже около 70%...

PHP, JavaScript и MySQL, как связать их правильно?
У меня вот такая проблема. Мне нужно достать соответствующий url из БД, чтоб при нажатии на сылку...

PHP+MySQL через ООП интерфейс
ребят, mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource &lt;?php ...

Подскажите как сделать правильно запрос на MySql
Добрый день. Пожалуйста, подскажите как сделать запрос на вывод данных из MySQL Задача такая на...

8
blackbanny
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
04.05.2011, 10:14 2
можно...
создай например файл connect.ini, напиши в нем:
PHP
1
2
3
4
5
6
<?php
$host = "localhost";   // имя или ip-адрес сервера MySQL 
$user = "user_name";   // имя пользователя, под которым вы можете работать с базой данных 
$pass = "password";    // пароль для доступа к БД 
$db   = "test_db";     // имя базы данных к которой подключаемся 
?>
ну и в файле скрипта, где происходит подключение к БД напиши include "connect.ini"
ну и переменные из connect.ini поставить куда надо:
PHP
1
$connect = mysql_connect($host, $user , $pass) or die("Ошибка соединения с сервером");
1
Humanoid
Почетный модератор
10091 / 3955 / 369
Регистрация: 12.06.2008
Сообщений: 11,561
04.05.2011, 10:49 3
Цитата Сообщение от blackbanny Посмотреть сообщение
создай например файл connect.ini, напиши в нем
только не connect.ini, а connect.php... иначе он его не выполнит, а покажет пользователю твой пароль.
И в данном случае лучше не include, а require... разница в том, что если файл не существует, include выдаст предупреждение и продолжит выполнять скрипт... а выполнить его правильно он всё равно не сможет. require в этом случае сразу остановится.
Использовать переменные или define - это тебе решать. Лично я предпочитаю использовать в таких случаях define, т.к. тогда я смогу использовать переменную с таким именем для других целей... и где-то читал, что define работает чуточку быстрее... хотя, думаю, это совсем не значительно.
2
blackbanny
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
04.05.2011, 11:37 4
Цитата Сообщение от Humanoid Посмотреть сообщение
только не connect.ini, а connect.php... иначе он его не выполнит, а покажет пользователю твой пароль.
И в данном случае лучше не include, а require... разница в том, что если файл не существует, include выдаст предупреждение и продолжит выполнять скрипт... а выполнить его правильно он всё равно не сможет. require в этом случае сразу остановится.
да действительно, затупил немного...
0
04.05.2011, 11:37
edelveys
2 / 2 / 0
Регистрация: 28.05.2010
Сообщений: 63
04.05.2011, 11:50  [ТС] 5
blackbanny, Humanoid спасибо.
Просто, именно для этого класса очень нежелательно использовать какие-то дополнительные файлы, вроде конфига или подключения.
Там дальше, объекты класса будут несколько раз подключаться к функции подключения.
Была идея сделать что-то вроде такого:
http://php.net/manual/en/language.oop5.constants.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
/** 
 * Constants that deal only with the database 
 */ 
class DbConstant extends aClassConstant { 
    protected $host = 'localhost'; 
    protected $user = 'user'; 
    protected $password = 'pass'; 
    protected $database = 'db'; 
    protected $time; 
    function __construct() { 
        $this->time = time() + 1; // dynamic assignment 
    } 
} 
?>
Но или опыта ещё не хватает или так нельзя реализовывать.

Я немного подправила класс, сейчас изменю немного его.
Хотя не думаю, что это существенно.

Добавлено через 10 минут
Похоже, что редактировать первое сообщение нельзя...

Вот обновлённый вариант класса:

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
<?php 
    header('Content-Type: text/html; charset=utf-8');
class Test
{
    static $counter = 0;
    public function __construct()
    {
        Test :: $counter++;
    }
    function __destruct()
    {
//parent :: __destruct(); 
        Test :: $counter--;
    }
    public function dbConnect()
    {
//$connect = mysql_connect($host, $user, $password) or die("Ошибка соединения с сервером"); 
//$connect = mysql_connect('DBSERVER', 'DBUSER', 'DBPASSWORD') or die("Ошибка соединения с сервером"); 
        $connect = mysql_connect('localhost', 'root', '123') or die("Ошибка соединения с сервером");
        $query = "CREATE DATABASE IF NOT EXISTS ourbase";
        $result = mysql_query($query) or die("Ошибка создания БД");
        $db = mysql_select_db("ourbase", $connect) or die("База данных не выбрана");
    }
    public function createDbTable()
    {
        this . dbConnect();
// создание таблицы  
        $query = "CREATE TABLE IF NOT EXISTS test (  
ID int primary key AUTO_INCREMENT,  
name varchar(100),  
INDEX (ID))";
        mysql_query($query) or die(mysql_errno() .":". mysql_error() ." Ошибка создания таблицы test");
        echo "База данных создана";
    }
    public function countValues()
    {
        return Test :: $counter;
    }
    
}
$obj1 = new Test($name);
echo $obj1 -> dbConnect(), '<br>';
echo $obj1 -> countValues(), '<br>';
?>
0
Humanoid
Почетный модератор
10091 / 3955 / 369
Регистрация: 12.06.2008
Сообщений: 11,561
04.05.2011, 12:06 6
Цитата Сообщение от edelveys Посмотреть сообщение
Просто, именно для этого класса очень нежелательно использовать какие-то дополнительные файлы, вроде конфига или подключения.
Можно с таким же успехом всё сделать в одном файле.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
    define('MYSQL_HOST','localhost');
    define('MYSQL_LOGIN','root');
    define('MYSQL_PASS','123');
    define('MYSQL_BASE','ourbase');
    header('Content-Type: text/html; charset=utf-8');
class Test
{
....
    public function dbConnect()
    {
        $connect = mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASS) or die("Ошибка соединения с сервером");
        $query = "CREATE DATABASE IF NOT EXISTS ".MYSQL_BASE;
        $result = mysql_query($query) or die("Ошибка создания БД");
        $db = mysql_select_db(MYSQL_BASE, $connect) or die("База данных не выбрана");
    }
.....
1
edelveys
2 / 2 / 0
Регистрация: 28.05.2010
Сообщений: 63
04.05.2011, 13:01  [ТС] 7
Спасибо большое!

Делала точно также, но выбрала не те имена констант и из-за этого просидела почти полночи над этим

Мой вариант был:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
   define('DBSERVER', 'localhost');  
   define('DBUSER', 'root');  
   define('DBPASSWORD', '123');  
   define('DATABASE', 'ourbase');  
   header('Content-Type: text/html; charset=utf-8');
 
class Test
{
    ...
    public function dbConnect()
    {
        $connect = mysql_connect('DBSERVER', 'DBUSER', 'DBPASSWORD') or die("Ошибка соединения с сервером");
    ...
0
Humanoid
Почетный модератор
10091 / 3955 / 369
Регистрация: 12.06.2008
Сообщений: 11,561
04.05.2011, 13:14 8
Цитата Сообщение от edelveys Посмотреть сообщение
mysql_connect('DBSERVER', 'DBUSER', 'DBPASSWORD')
Тут кавычки не надо... это же константы, а не содержимое строки.
1
edelveys
2 / 2 / 0
Регистрация: 28.05.2010
Сообщений: 63
04.05.2011, 13:46  [ТС] 9
Цитата Сообщение от Humanoid Посмотреть сообщение
Тут кавычки не надо... это же константы, а не содержимое строки.
Точно. Спасибо. Теперь работает и с моими константами.
В каком-то из примеров увидела кавычки, так и сделала...
0
04.05.2011, 13:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2011, 13:46

Как красиво и вообще правильно организовать запросы
Сохраняю большое количество данных в разных связанных, зависимых и т.п. таблицах инсертами. Но...

Как правильно сделать запрос к MySQL для подсчета записей
Всем привет. Сделал себе вот такой вывод всех категорий на главной странице сайта (CMS DLE):...

Как сделать поиск с помощью php в таблице MySQL
Доброе время суток. Подскажите плиз как сделать поиск с помощью php в таблице mySQL вот что я...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.