С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 20

В чем ошибка запроса mysqli?

29.07.2018, 19:22. Показов 1813. Ответов 7

Студворк — интернет-сервис помощи студентам
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in on line 38

Database.php стр 38
PHP
1
$res = mysqli_query($db, $query);
т.е. Первый параметр(подключения) равен null Это значит что не получилось подключиться к базе?

2 Warning: Invalid argument supplied for foreach() in D:\sites\mysite.local\www\rus\oop\cms\ma in.php on line 11

main.php стр 11

PHP
1
<? foreach($text as $item) : ?>

Database.php


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
 
class Database {
    public $db;
    
    public function __construct($host,$user,$pass,$db) {
        
        
        $this->db = @mysqli_connect('127.0.0.1', 'root', '', 'my_bd') or die('Ошибка соединения с БД');
 
            
        return $this->db;
    }
    
    public function get_all_db() {
        
        
        $sql = "SELECT id,title, discription FROM statti";
        
        $res = mysqli_query($db, $query);
        
    
if(!$res) {
            return FALSE;
        }
        for ($i = 0;$i < mysqli_num_rows($res); $i++) {
            $row[] = mysqli_fetch_array($res,MYSQL_ASSOC);
        }
        
    
        return $row;
 
 
    }
 
 
    
    public function get_one_db($id) {
    
        
 
        $sql = "SELECT id,title,text FROM statti WHERE id=?";
        $res = mysqli_query($sql,$query);
        
        if(!$res) {
            return FALSE;
        }
        $row = mysqli_fetch_array($res,MYSQLi_ASSOC);
        
        return $row;
    }
}
 
?>
config.php

PHP
1
2
3
4
5
6
7
8
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','my_bd');
 
header("Content-Type:text/html;charset='cp1251'");
?>
main.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<body>
<h1>Header</h1>
    <? if(isset($text)) : ?>
        <? foreach($text as $item) : ?>
            <h2>
                <a href="index.php?id=<?=$item['id'];?>"><?=$item['title'];?></a>
            </h2>
            <p>
                <?=$item['discription'];?>
            </p>
        <? endforeach; ?>
    <? endif; ?>
<h6>footer</h6>
</body>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2018, 19:22
Ответы с готовыми решениями:

Перевод запроса с mysql на mysqli
Подскажите, как будет выглядеть запрос на mysqli $k_post = mysql_result(mysql_query(&quot;SELECT COUNT(*) FROM `user` WHERE `date_last`...

Использовать MySQLi или PDO для POST запроса
Всем привет господа. Помогите с POST запросом. Есть база Есть регистрация на сайте &lt;?php error_reporting(E_ALL); ...

Чем PDO отличается от MySQLi?
Cra3y, чем PDO отличается от mysqli ? есть какие фишки что ли? не охото мануал до полночи курить )) вроде mysqli проблем и опасений...

7
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
29.07.2018, 20:31
Цитата Сообщение от MailaGoogle Посмотреть сообщение
Это значит что не получилось подключиться к базе?
Да. Но здесь у вас ошибка связана с конкретным запросом. Методы вашего класса для работы с базой данных - одно сплошное недоразумение. Возьмем конкретно get_all_db:
- перепутали имя переменной для хранения строки с запросом;
- обращаетесь к свойству, как к обычной переменной;
- цикл ужасный;
- имя $row не подходит по смыслу.
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 20
29.07.2018, 22:41  [ТС]
Всё дело в том, что изначально скрипт был написан на php5 и работает с запросами mysql.
Но теперь я пробую его обновить под php7 c msqli и отсюда ошибки.

Сейчас установилось расширение RedBeanPHP, но в нём ещё не разобрался - работает ли оно с sql-запросами и каким образом.

В этом варианте всё ровно выводит ошибку Warning: mysqli_query() expects parameter 1 to be mysqli, null given
здесь:
PHP
1
$res = mysqli_query($db,$sql);
т.е. как будто подключения и нет(

Database.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
require 'config.php';
require 'rb.php';
 
header('Content-type: text/html; charset=utf-8');
 
class Database {
    public $db;
    
    public function __construct($host,$user,$pass,$db) {
        
         R::setup( 'mysql:host=localhost;dbname=my_bd',
        'user', '' );
 
  
    }   //return $this->db;
    
    
         /*$db = mysqli_connect(HOST, USER, PASS, DB);
   if (mysqli_connect_errno()) {
       $this->error_tpl('Не удалось подключиться к базе данных', mysqli_connect_error());
       die();
   }
   if (!mysqli_set_charset($db, "utf8")) {
       $this->error_tpl('Ошибка базы данных', mysqli_error($db));
       die();
   }
   return $db;*/
 
        
        
    /*  mysqli_query("SET NAMES cp1251");*/
    //  mysqli_query($link, ‘set names cp1251’)
        /*mysqli_set_charset($db, "SET NAMES cp1251") or die('Не установлена кодировка');*/
        /*mysqli_query($link, "utf8")  or die('Не установлена кодировка');
*/
 
        
    
    public function get_all_db() {
        
         $sql = "SELECT id, title, discription FROM statti";
            $res = mysqli_query($db,$sql);
 
if(!$res) {
            return FALSE;
        }
        for ($i = 0;$i < mysqli_num_rows($res); $i++) {
            $row[] = mysqli_fetch_array($res,MYSQL_ASSOC);
        }
        
        return $row;
    }
    
    
 
//$query = mysqli_query($db,$query);
//var_dump($res);
 
/*$res = mysqli_fetch_assoc($db);*/
/*$result = mysqli_query($mysqli, $link,'SELECT * FROM statii') or die("ERROR: ".mysqli_error());
*/
//$link = mysqli_connect($host,$user,$pass,$db);
/*$res = $db->query('SELECT  id,title,discription FROM statti') or die("ERROR: ".mysqli_error($link));
 
*/
/*$messages = get_all_db($id);*/
        
 
    
    public function get_one_db($id) {
    
        /*$sql = "SELECT id,title,text FROM statti WHERE id='$id'";*/
 
        $sql = "SELECT id,title,text FROM statti WHERE id=?";
        $res = mysqli_query($db,$sql);
        
        if(!$res) {
            return FALSE;
        }
        $row = mysqli_fetch_array($res,MYSQL_ASSOC);
        
        return $row;
    }
}
 
?>
а также что-то с циклом foreach Warning: Invalid argument supplied for foreach() in main.php on line 11

main.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="" content="">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body>
<h1>Header</h1>
    <? if(isset($text)) : ?>
        <? foreach($text as $item) : ?>
            <h2>
                <a href="index.php?id=<?=$item['id'];?>"><?=$item['title'];?></a>
            </h2>
            <p>
                <?=$item['discription'];?>
            </p>
        <? endforeach; ?>
    <? endif; ?>
<h6>footer</h6>
</body>
</html>
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
30.07.2018, 12:31
Лучше сначала с первым разберитесь, а то уже что новое привлекаете, опять толком не разобравшись в этом новом.

Расширение mysqli есть и в php5, и в php7. Исправьте по пунктам упомянутые мной выше допущенные вами ошибки. Что касается цикла внутри метода, можно использовать цикл while, цикл foreach прямо на $res или просто вместо цикла метод fetch_all (достаточно давно поддерживается в php5).
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 20
30.07.2018, 16:09  [ТС]
Да, расширение musqli есть и php5, только мне php5 вообще не нужeн уже.
В версии скрипта для php5 у меня всё отлично работает. Вот код класса Database:



PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
 
class Database {
    public $db;
    
    public function __construct($host,$user,$pass,$db) {
        $this->db = mysql_connect($host,$user,$pass);
        if(!$this->db) {
            exit('No connection with database');
        }
        if(!mysql_select_db($db,$this->db)) {
            exit('No table');
        }
        
        mysql_query("SET NAMES cp1251");
        
        return $this->db;
    }
    
    public function get_all_db() {
        $sql = "SELECT id,title,discription FROM statti LIMIT 10";
        
        $res = mysql_query($sql);
        
        if(!$res) {
            return FALSE;
        }
        for ($i = 0;$i < mysql_num_rows($res); $i++) {
            $row[] = mysql_fetch_array($res,MYSQL_ASSOC);
        }
        
        return $row;
    }
    
    public function get_one_db($id) {
    
        $sql = "SELECT id,title,text FROM statti WHERE id='$id'";
        $res = mysql_query($sql);
        
        if(!$res) {
            return FALSE;
        }
        $row = mysql_fetch_array($res,MYSQL_ASSOC);
        
        return $row;
    }
}
 
?>

Теперь я хочу адаптировать код под php7, где Mysql уже не используется и вместо него пробую заменить на Mysqli.

Проблема с соединением решилась просто через RedBeanPHP,

PHP
1
2
3
4
5
6
7
8
require 'rb/rb.php';
 
 
 R::setup('mysql:host=127.0.0.1;dbname=my_bd', 'root', '' );
 if ( !R::testConnection()) {
 
    exit ('No connection');
 }
Но вот с выводом строк пока нет.

В RedBeanPHP есть функция
PHP
1
R::findAll
которая выводит записи в виде массива:

PHP
1
2
3
4
$cat = R::findAll('statti', 'id > ?', [1]);
echo '<pre>';
 
print_r($cat);
в браузере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<pre>Array
(
    [2] => RedBeanPHP\OODBBean Object
        (
            [properties:protected] => Array
                (
                    [id] => 2
                    [title] =>  title"Название"
                    [meta_k] => текст какой-то
                    [meta_d] => ешё текст
                    [author] => yan
                    [date] => 2018-07-30
                    [discription] => Описание: "Текст"
                    [text] => 
Текст
                )

Необходимо как-то преобразовать их, подобно моей функции get_all_db()

Конечно, можно все вывести через echo, но если статей много, то это не вариант вообще.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$cat = R::load('statti',1);
$c = R::load('statti',2);
echo $cat->discription;
echo '<br>';
echo $cat->title;
echo '<br>';
echo $cat->text; // работаем с данными, как с объектом
echo '<br>';
 
 
echo $c['discription'];
echo '<br>';
echo $c['title'];
echo '<br>';
echo $c['text'];
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
31.07.2018, 01:04
Читайте документацию по RB или переименовывайте тему, раз не готовы следовать моим рекомендациям
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
31.07.2018, 13:41
Цитата Сообщение от MailaGoogle Посмотреть сообщение
header("Content-Type:text/html;charset='cp1251'");
это нахрена?
Цитата Сообщение от MailaGoogle Посмотреть сообщение
PHP
1
2
$sql = "SELECT id,title,text FROM statti WHERE id=?";
    $res = mysqli_query($sql,$query);
где подстановка значения параметра?
Цитата Сообщение от MailaGoogle Посмотреть сообщение
но если статей много, то это не вариант вообще.
почему?
ответите на эти вопросы - станет проще
0
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 20
01.08.2018, 23:54  [ТС]
это нахрена?
Почитайте выше, 3 раза писать о том, что изначально cms была на php5 и на тот момент это было актуально. Да и вопрос был не об этом.

почему?
Потому-что выводить все через ECHO - это ужасный код. Есть решения более красивые.

Вот к примеру:
PHP
1
$cat = R::findAll('statti', 'id > ?', [0]); foreach($cat as $c){ echo $c->title.' <br> '.$c->discription.' <br> '.$c->text; }

Читайте документацию по RB или переименовывайте тему, раз не готовы следовать моим рекомендациям
Спасибо, документацию изучил. Ответы нашёл. Ваши рекомендации были слишком размытые для меня)

Тему можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2018, 23:54
Помогаю со студенческими работами здесь

Mysql_result() чем заменить в mysqli
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME); $sql = &quot;SELECT count(*) FROM basket WHERE customer='&quot;.session_id().&quot;'&quot;; ...

В чем отличия MySQL от MySQLi или как защитить передаваемые данные
Вообщем сделал небольшую форму аутентификации где данные записываются в БД. Все работает, но где-то я прочел, что mysqli более безопаснее...

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in
Здравствуйте! Подскажите как решить проблему с выдаваемыми ошибками: Вот сам файл install.php &lt;?php //Подключение нужных...

Ошибка с mysqli
Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/u159038104/public_html/save_user.php on line 20 &lt;?php if...

Mysqli INSERT ошибка
Всем привет, начал осваивать mysqli и в ступор привела одна ситуация, в гугле информации по этому поводу не нашел Есть 2 запроса, тот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru