X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Mysqli_num_fields () ожидает ....
ROM710
ROM710
Topic Starter сообщение 7.5.2020, 21:44; Ответить: ROM710
Сообщение #1



$list_f = mysql_list_fields ($database, 'board');
$n = mysqli_num_fields($list_f);

Здравствуйте, и снова ошибки лезут. Сейчас - ,, Предупреждение: mysqli_num_fields () ожидает, что параметр 1 будет mysqli_result, null задан в... ,,  ссылаясь на эти строки -
Опять же по мануалу не получается исправить. Будьте добры, кто рядом, подскажите пожалуйста где искать причину.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Artos_mw
Artos_mw
сообщение 8.5.2020, 11:58; Ответить: Artos_mw
Сообщение #2


РОМ710, сравните приведённый вами код и текст предупреждения:
mysql_list_fields и mysqli_num_fields.
Разница не только в функциях, но и типе:
mysql и mysqli.
Используйте что-то одно, лучше с буковкой i.

Теперь про null.
При попытке подключения к базе
$link = mysqli_connect("host", "user", "pass", "world");
создаётся имя соединения и присваивается переменной $link.
Далее в скриптах, при использовании функций обращения к базе необходимо им передавать имя соединения.
Так вот. Имени соединения может и не оказаться в $link в некоторых случаях.
1. По каким-то причинам соендинение не состоялось (не те имя, пароль, неисправность сервера или др.) и имя присвоилось никакое, т. е. null.
2. Испльзуемые значения находятся в разных зонах вилимости. Допустим, mysqli_connect использутете внутри функции 1
моя_функция_1() {
 $link = mysqli_connect(...
 // и ещё куча кода
}
а mysqli_num_fields внутри функции 2
моя_функция_2() {
 $aaa = mysqli_num_fields($link, ...
 // и ещё куча кода
}
В таком случае во второй функцие получим ругательство про null ибо вторая функция не видит, что делалось в первой.

Что делать.
В причине номер 1 добавить код проверки соединения, что-то типа
if (!($link = mysqli_connect("host", "user", "pass", "world"))) {
    //сообщить в браузер "Нет соединения" и выполнить аварийный сценарий.
} else {
    // продолжить выполнение нормального сценария
}
В причине номер 2 передавать $link внутрь второй функции, предварительно достав из первой функции. Способов для этого много, например, объявляя суперглобальные, создавая свои константы и др. способы.


Сообщение отредактировал Artos - 8.5.2020, 12:02
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 8.5.2020, 12:53; Ответить: miketomlin
Сообщение #3


В MySQLi fetch_fields()


Сообщение отредактировал miketomlin - 8.5.2020, 13:02


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 8.5.2020, 13:23; Ответить: miketomlin
Сообщение #4


Причем это не аналог mysql_list_fields. Если нужна инфа о полях прямо из БД, используйте соотв. запрос, указанный в описании к этой ф-ции.
И результаты выполнения запросов нужно проверять, а то будете периодически ловить ошибки, подобные показанной, в работающих сайтах.
Artos_mw, функции mysqli_num_fields в природе не существует. Пусть сначала ТС норм. объяснит, что он хочет получить. А то там возможны варианты, у него все слишком запутано.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ROM710
ROM710
Topic Starter сообщение 8.5.2020, 17:04; Ответить: ROM710
Сообщение #5


Спасибо большое всем за подсказки и пояснения, читаю ючусь. В моем случае Получается если прописываю MySQLi fetch_fields() и объявляю переменную if(isset($database)). Тестирую, вроде работает. Спасибо еще раз.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Artos_mw
Artos_mw
сообщение 9.5.2020, 1:01; Ответить: Artos_mw
Сообщение #6


(miketomlin @ 8.5.2020, 16:23) *
функции mysqli_num_fields в природе не существует

Функция с именем mysqli_num_fields в природе может не существовать, а вот в отдельно взятом скрипте может быть создана программистом как пользовательская. Разумеется, к mysqli она отношения иметь не будет.

Сообщение отредактировал Artos - 9.5.2020, 1:05
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 9.5.2020, 14:09; Ответить: MattCutts_mw
Сообщение #7


(РОМ710 @ 8.5.2020, 20:04) *
if(isset($database)).

в последних версиях пыха на обязательно использовать isset, достаточно if ( $var )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ROM710
ROM710
Topic Starter сообщение 9.5.2020, 17:16; Ответить: ROM710
Сообщение #8


Спасибо MattCutts за подсказк, удобнее.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 9.5.2020, 18:08; Ответить: miketomlin
Сообщение #9


«в последних версиях пыха» в этом отношении ничего не изменилось. Это разные вещи. Но действительно object/null и, само собой, логические значения можно проверять при помощи if ($var), вот только к неопределенной переменной это не относится.
Выше уже был пример. Вот типовой код:

if ($link=mysqli_open())


if ($result=query('SELECT 1'))


while ($row=getrow())

Это ф-ции-обертки, но с нативными ф-циями пыха можно работать точно так же.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 29.3.2024, 5:20
Дизайн