Jump to content
  • 0

Повторное использование так называемого "дескриптора соединения с базой mysql"


korjik
 Share

Question

Всем привет! Задался вопросом - а правильно ли использовать так называемый "дескриптор соединения" повторно?

Например:

 $result = mysql_query("SELECT * FROM users WHERE login = '$login' LIMIT 1", $link); 

В данном примере дескриптор соединения это $result. Можно ли его дальше использовать для sql-запросов? Или для каждого запроса нужен свой дискриптор? Корректно ли это?

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Всем привет! Задался вопросом - а правильно ли использовать так называемый "дескриптор соединения" повторно?

Например:

 $result = mysql_query("SELECT * FROM users WHERE login = '$login' LIMIT 1", $link); 

В данном примере дескриптор соединения это $result. Можно ли его дальше использовать для sql-запросов? Или для каждого запроса нужен свой дискриптор? Корректно ли это?

имеется ввиду использовать его повторно, но с другим условием выборки?

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

технически, получается примерно так: программа доходит до вашего кода, далее выводит то что нужно, потом опять натыкается на ту же переменную, но с другим условием, она перезаписывает на этом уровне ее и дальше уже выводит данные с другими параметрами..., т.е. программа идет как бы с верху в низ.

Link to comment
Share on other sites

  • 0

Если использовать более высокий уровень абстракции, то можно не забивать голову такими низкоуровневыми вещами как ссылка на соединение, дескриптор...

В хорошем коде, по-уму не должно быть SQL-запросов. Они должны в другом слое вообще лежать. Даже не лежать, а формироваться автоматом, но не руками.

Link to comment
Share on other sites

  • 0

Конечно не правильно! Правильно использовать PDO ;)

Запросы не всегда верно генерить автоматом. Если проект не большой, то все равно, как будет создан запрос. А если проект претендует держать highload, то часто каждый запрос таки прописывают ручками и тестируют его до идеала. Т.к. именно структура БД и медленные запросы являются основным препятствием для highload проектов.

Только в этом случае запрос все же хранится и используется на уровне класса/метода модели, а не в контроллере, как некоторые делают.

И выглядеть это будет как:

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql);
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();

Link to comment
Share on other sites

  • 0

Запросы не всегда верно генерить автоматом. Если проект не большой, то все равно, как будет создан запрос. А если проект претендует держать highload, то часто каждый запрос таки прописывают ручками и тестируют его до идеала. Т.к. именно структура БД и медленные запросы являются основным препятствием для highload проектов.

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

на одном абстракция и универсальность системы, для простого и повсеместного её использования

на другом оптимальная структура БД и отшлифованные запросы, для конкретного уникального проекта и оптимальной скорости.

Только в этом случае запрос все же хранится и используется на уровне класса/метода модели, а не в контроллере, как некоторые делают.

+1

Link to comment
Share on other sites

  • 0

В данном примере дескриптор соединения это $result. Можно ли его дальше использовать для sql-запросов? Или для каждого запроса нужен свой дискриптор? Корректно ли это?

Странно, что ни кто не заметил, что дескриптор соединения в данном случае не $result, а $link

  • Like 3
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy