Функция не возвращает правильный ресурс - PullRequest
0 голосов
/ 08 октября 2009

У меня есть эта функция:

function query_dp($sql) {
    $link = mysql_connect('localhost', $bd_id, $bd_pass);
    mysql_select_db("$bd");

    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    return mysql_query($sql) or die(mysql_error());

    mysql_close($link);
}

В основной программе, когда я пытаюсь сделать:

echo mysql_num_rows(query_db($sql));

Я получаю в ответ

1

Когда я не инкапсулирую этот код в функцию и не использую его непосредственно в основной программе, я получаю количество выбранных строк.

Функция не возвращает ресурс, а ... целое число? WTF?

Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

3 голосов
/ 09 октября 2009

Ваши переменные $bd_id, $bd_pass и $bd не видны внутри функции, поскольку они, вероятно, объявлены в глобальной области действия , а не в локальной области действия этой функции.

Вы можете сделать глобальные переменные доступными, используя ключевое слово global , используя $GLOBALS переменную , или передав их в функцию .

1 голос
/ 08 октября 2009

ваш вызов mysql_close означает, что у вас больше нет ссылки на нужный ресурс mysql в mysql_num_rows

1 голос
/ 09 октября 2009

Проблема в операторе "или". Ваша функция возвращает результат выражения «mysql_query ($ sql) или die (mysql_error ())», равное 1 или 0. Я предлагаю вам использовать что-то вроде этого:

$query_result = mysql_query($sql);
if (!$query_result) {
    die(mysql_error());
}
return $query_result;

Также никогда не вызывается последняя строка этой функции «mysql_close ($ link)».

0 голосов
/ 08 октября 2009

Это не дает прямого ответа на ваш вопрос, но вы не должны использовать оригинальный интерфейс mysql. это неуклюжий и процедурный. Взгляните на mysqli интерфейс . Не пытайтесь обернуть старые функции, если у вас есть поддерживаемый язык стандарта, который уже делает это: D

Вы выше код просто становится

$m = new MysqlI(...);
$rc = $m->query(...);
echo $rc->num_rows();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...