Соединения с базой данных и функции? - PullRequest
0 голосов
/ 19 сентября 2011

Я новичок в использовании функций, так что - без суждений, пожалуйста;).

Допустим, у меня есть функция add_to_x() в function.php, которая внутри выполняет mysql_query().Эта функция включена (include "function.php";) в script.php и вызывается в середине этого скрипта.В верхней части function.php я устанавливаю соединение с базой данных, закрывая его в конце.

Будет ли это по умолчанию передано функции add_to_x() или мне нужно будет установить и закрыть соединение внутри add_to_x() само по себе?


Для иллюстрации и правильной меры:

Содержимое script.php

include "function.php";
// Do something
add_to_x($arg1, $arg2);
// Do something else

Содержимое файла function.php

include "db_conn.php";
$conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name);

function add_to_x($arg1, $arg2) {
    // Do something
    $query = "SELECT * FROM table WHERE x = '$arg1'";
    $result = mysql_query($query);
}

mysql_close($conn);

Будет ли это работать?Или мне нужно сделать что-то вроде этого:

function add_to_x($arg1, $arg2) {
    include "db_conn.php";
    $conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name);
    // Do something
    $query = "SELECT * FROM table WHERE x = '$arg1'";
    $result = mysql_query($query)
    mysql_close($conn);
}

Это может показаться довольно глупым вопросом, но я не уверен в объеме соединений / функций.Я чувствую, что, возможно, второй пример будет лучше практиковать, даже если первый сработает?

Будем весьма благодарны за любые комментарии, советы и ответы!(Я понимаю, что сделал этот вопрос немного запутанным, но надеюсь, что иллюстративный код поможет, и, конечно, если вам нужны дополнительные разъяснения, пожалуйста, спросите его)!

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

Вы можете открыть соединение с базой данных в файле, который определяет ваши функции, как вы делаете.Но закрытие в конце function.php - это , а не , что вы хотите сделать - делая это, вы закрываете соединение до того, как оно когда-либо будет использоваться.

Вы бы либо позвонили mysql_close() в самом конце вашего основного скрипта (после всех вызовов функций, которые требуют подключения), или не совсем (ресурс будет неявно закрыт / освобожден после завершения скрипта).

1 голос
/ 19 сентября 2011

Немного объяснений:
1) Если у вас есть $conn, определенный в глобальной области, вы можете получить к нему доступ из любой функции, используя ключевое слово global, например,

function add_to_x(){
    global $conn;
}

2), которое вы можетеиспользуйте запросы mysql в своих функциях, даже если соединение установлено «снаружи», так как mysql будет использовать последний открытый соединитель, если не указано другое

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

1 голос
/ 19 сентября 2011

Любой код, который находится в глобальной области действия function.php (т.е. не внутри функции), будет выполнен, когда вы включите скрипт.Таким образом, в опубликованном вами коде $conn больше не будет открыт в вашем add_to_x().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...