Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобраться чего не хватает

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Warning: mysqli_query() expects at least 2 parameters, 1 given in functions.php on line 4
DonQuijote
Отправлено: 04 Декабря, 2015 - 14:14:55
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Выводит ошибку "Warning: mysqli_query() expects at least 2 parameters, 1 given in Z:\home\**\**\conf\functions.php on line 4"

Файл index
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ('conf/connect_db.php');
  3. include ('conf/functions.php');
  4. if(!isset($_GET['page_id'])){
  5.     $page_id = '1';
  6. }
  7. else{
  8.     $page_id = addslashes(strip_tags(trim($_GET['page_id'])));
  9. }
  10. $page_data = GetDataArt($page_id);
  11. ?>
  12. <!doctype html>
  13. <html>
  14. <head>
  15. <meta charset="windows-1251">
  16. <title><?PHP echo $page_data[1]; ?></title>
  17. <meta name="description" content="<?PHP echo $page_data[3]; ?>" />
  18. <meta name="keywords" content="<?PHP echo $page_data[2]; ?>" />
  19. <link href="all_styles.css" rel="stylesheet" type="text/css" media="screen">
  20. </head>
  21.  
  22. <body>
  23. <div id="wrapper">
  24.  
  25. <div id="header"><a href="/"><img src="img/logo.png" width="350" height="50"></a></div>
  26. <div id="nav"><?PHP include('include/navigation.tpl'); ?></div>
  27. <div id="content"><?PHP echo $page_data[4]; ?></div>
  28. <div id="right_col"><?PHP include('include/right_col.tpl'); ?></div>
  29. <div id="footer"><?PHP include('include/footer.tpl'); ?></div>
  30.  
  31. </div>
  32. </body>
  33. </html>


Файл Connect_db
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /* Подключение к серверу MySQL */
  3. $mysqli = new mysqli('localhost', 'root', '', 'portfo');
  4. /* Проверка соединения */
  5. if ($mysqli->connect_errno) {
  6.         printf("Подлючение к серверу MySQL невозможно. Код ошибки %s\n", $mysqli->connect_error);
  7.         exit;
  8. }
  9. /* изменение набора символов на utf8 */
  10. !$mysqli->set_charset("cp1251");
  11.  
  12. ?>


файл functions

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function GetDataArt($page_id){
  3.   $sel = "SELECT * FROM `pages` WHERE `id` = '$page_id' LIMIT 1";
  4.   $query = mysqli_query($sel);
  5.   if(!$query){
  6. echo('Не удалось взять данные из БД!');
  7.   }
  8.   else{
  9. if(mysqli_num_rows($query)>0){
  10.   $res = mysqli_fetch_array($query);
  11.   $title = $res['title'];
  12.   $page_title = $res['title'];
  13.   $meta_kw = $res['meta_kw'];
  14.   $meta_d = $res['meta_d'];
  15.   $content = $res['content'];
  16. }
  17. else{
  18.   $title = 'К сожалению, такая страница отсутствует на данном сайте!';
  19.   $page_title = 'К сожалению, такая страница отсутствует на данном сайте!';
  20.   $meta_kw = $meta_d = $content = '';
  21. }
  22. $data_arr = array($title, $page_title, $meta_kw, $meta_d, $content);
  23. return $data_arr;
  24.   }
  25. }
  26. ?>


Не могу понять, какие два параметра он у меня просит
 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2015 - 14:19:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Открываете мануал и читаете: http://php.net/manual/en/mysqli.query.php
Для процедурного варианта требуется два обязательных параметра.


-----
PostgreSQL DBA
 
 Top
DonQuijote
Отправлено: 04 Декабря, 2015 - 16:15:55
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Открываете мануал и читаете: http://php.net/manual/en/mysqli.query.php
Для процедурного варианта требуется два обязательных параметра.


Если бы там было написано, то наверное разобрался бы, но там нет ничего похожего
 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2015 - 16:44:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Как нет похожего? Мануал к функциям и методам с этого и начинается: сигнатура метода, описание параметров, описание возвращаемых значений и ошибок.
Цитата:
Procedural style
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Цитата:
link

Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()

Цитата:
query

The query string.

Data inside the query should be properly escaped.


-----
PostgreSQL DBA
 
 Top
DonQuijote
Отправлено: 04 Декабря, 2015 - 16:54:48
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Как нет похожего? Мануал к функциям и методам с этого и начинается: сигнатура метода, описание параметров, описание возвращаемых значений и ошибок.
Цитата:
Procedural style
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Цитата:
link

Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()

Цитата:
query

The query string.

Data inside the query should be properly escaped.


Всё равно не понимаю, что за link, откуда он взялся.
Мануал, он как пример в геометрии, пример все умеют решать, а потом дают другой пример, которого нет, и говорят он также решается. А в итоге ничего подобного
 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2015 - 19:03:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Няяяя...

А я ещё думал, целиком цитировать описание link или кусочка хватит. Процитировал целиком. И даже этого оказалось мало. Блин, там же прямым текстом сказано, что это должен быть за линк.

Вот, я даже някать начал. Если вы настолько не понимаете английский - ну переключите мануал на русский. В редких местах перевод устаревший, местами отсутствует, но есть и вполне внятный.


-----
PostgreSQL DBA
 
 Top
DonQuijote
Отправлено: 04 Декабря, 2015 - 20:26:23
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Няяяя...

А я ещё думал, целиком цитировать описание link или кусочка хватит. Процитировал целиком. И даже этого оказалось мало. Блин, там же прямым текстом сказано, что это должен быть за линк.

Вот, я даже някать начал. Если вы настолько не понимаете английский - ну переключите мануал на русский. В редких местах перевод устаревший, местами отсутствует, но есть и вполне внятный.


Я вроде объектно-ориентированный делал, почему процедурный-то
 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2015 - 21:03:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Потому что функция mysqli_query - это процедурный метод расширения mysqli.
Объектный - метод query класса mysqli


-----
PostgreSQL DBA
 
 Top
DonQuijote
Отправлено: 04 Декабря, 2015 - 21:05:55
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Потому что функция mysqli_query - это процедурный метод расширения mysqli.
Объектный - метод query класса mysqli


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function GetDataArt($page_id){
  3.   $sel = $mysqli->query("SELECT * FROM `pages` WHERE `id` = '$page_id' LIMIT 1");
  4.   $query = $mysqli->query($sel);
  5.   if(!$query){
  6. echo('Не удалось взять данные из БД!');
  7.   }
  8.   else{
  9. if($mysqli->num_rows($query)>0){
  10.   $res = $mysqli->fetch_array($query);
  11.   $title = $res['title'];
  12.   $page_title = $res['title'];
  13.   $meta_kw = $res['meta_kw'];
  14.   $meta_d = $res['meta_d'];
  15.   $content = $res['content'];
  16. }
  17. else{
  18.   $title = 'К сожалению, такая страница отсутствует на данном сайте!';
  19.   $page_title = 'К сожалению, такая страница отсутствует на данном сайте!';
  20.   $meta_kw = $meta_d = $content = '';
  21. }
  22. $data_arr = array($title, $page_title, $meta_kw, $meta_d, $content);
  23. return $data_arr;
  24.   }
  25. }
  26. ?>
 
 Top
esterio
Отправлено: 05 Декабря, 2015 - 01:09:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




DonQuijote пишет:
$sel = $mysqli->query("SELECT * FROM `pages` WHERE `id` = '$page_id' LIMIT 1");
$query = $mysqli->query($sel);

не надо два раза визвивать метод, причем второй раз неверный.
 
 Top
arxnday
Отправлено: 05 Декабря, 2015 - 03:24:06
Post Id


Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Июнь 2013  


Помог: 0 раз(а)




DonQuijote пишет:
Мелкий пишет:
Как нет похожего? Мануал к функциям и методам с этого и начинается: сигнатура метода, описание параметров, описание возвращаемых значений и ошибок.
Цитата:
Procedural style
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Цитата:
link

Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()

Цитата:
query

The query string.

Data inside the query should be properly escaped.


Всё равно не понимаю, что за link, откуда он взялся.
Мануал, он как пример в геометрии, пример все умеют решать, а потом дают другой пример, которого нет, и говорят он также решается. А в итоге ничего подобного

В процедурном стиле(в котором у вас код), вызов осуществляется как-то так:
PHP:
скопировать код в буфер обмена
  1. $db = mysqli_connect('host', 'name', 'passwd', 'bd_name');
  2. $sql = "SELECT BLA-BLA...";
  3. $query = mysqli_query($db, $sql);
  4.  

Проще говоря,в запросе в третьей строке сначала определяете к какой базе($db) открываете коннект и отсылаете инструкцию($sql) в mysql сервер.
Переменная $db в моем примере и есть link который вы не поняли.
Я бы попытался объяснить и объектный стиль, но сам только в процедурном писал.

(Отредактировано автором: 05 Декабря, 2015 - 03:34:39)

 
 Top
DonQuijote
Отправлено: 05 Декабря, 2015 - 08:00:42
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




esterio пишет:
DonQuijote пишет:
$sel = $mysqli->query("SELECT * FROM `pages` WHERE `id` = '$page_id' LIMIT 1");
$query = $mysqli->query($sel);

не надо два раза визвивать метод, причем второй раз неверный.


Сейчас пишет "Call to a member function query() on a non-object in"
Какой объект он теперь не может найти не понимаю
 
 Top
Мелкий Супермодератор
Отправлено: 05 Декабря, 2015 - 14:50:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Включите вывод ошибок в нормальный E_ALL. (или -1 для музейных версий PHP)
Перед fatal error'ом ещё Notice есть.


-----
PostgreSQL DBA
 
 Top
DonQuijote
Отправлено: 05 Декабря, 2015 - 16:34:07
Post Id


Новичок


Покинул форум
Сообщений всего: 48
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Мелкий пишет:
Включите вывод ошибок в нормальный E_ALL. (или -1 для музейных версий PHP)
Перед fatal error'ом ещё Notice есть.


вот такое пишет
Notice: Undefined variable: mysqli in bla-bla-bla\conf\functions.php on line 4
неопределённая переменная mysqli на 4 строке, а это "$result = $mysqli->query("SELECT `title`, `meta_kw`, `meta_d`, `content` FROM `pages` WHERE `id` = '$page_id' LIMIT 1");"
 
 Top
Мелкий Супермодератор
Отправлено: 05 Декабря, 2015 - 17:14:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ну и?
Я знаю, и что notice будет, какой он будет, про какую переменную и на какой строке провоцируется и что это непосредственная причина и подсказка для исправления последующего fatal error'а.
Это же очевидно по сигнатуре функции и первой строке реализации.
Если вам это почему-то не очевидно - то начните изучение PHP с самого начала. Конкретно - пользовательские функции и области видимости переменных.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB