Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
1

Warning: mysqli_query() expects parameter 1 to be mysqli

21.06.2017, 20:47. Просмотров 1708. Ответов 6
Метки нет (Все метки)


Здравствуйте, уважаемые форемчане. Только начал попытку изучения PHP и MySQL. Решил начать со страницы регистрации. Погуглив немного нашел данный код.

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
<?php
    if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
    if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    if (isset($_POST['mail'])) { $mail=$_POST['password']; if ($mail =='') { unset($mail);} }
    //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
 if (empty($login) or empty($password) or empty($mail)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    {
    exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
    }
    //если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
 $password = stripslashes($password);
    $password = htmlspecialchars($password);
    $mail = stripslashes($mail);
    $mail = htmlspecialchars($mail);    
    
 //удаляем лишние пробелы
    $login = trim($login);
    $password = trim($password);
    $mail = trim($mail);
 // подключаемся к базе
    include ("bd.php"); // файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
 // проверка на существование пользователя с таким же логином
    $result = mysqli_query("SELECT id FROM users WHERE login='$login'",$db);
    $myrow = mysqli_fetch_array($result);
    if (!empty($myrow['id'])) {
    exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
    }
 // если такого нет, то сохраняем данные
    $result2 = mysqli_query ("INSERT INTO users (login,password,mail) VALUES('$login','$password','$mail')");
    // Проверяем, есть ли ошибки
    if ($result2=='TRUE')
    {
    echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>";
    }
 else {
    echo "Ошибка! Вы не зарегистрированы.";
    }
    ?>
и для другой страницы

PHP
1
2
3
4
<?php
        $db = mysql_connect ("ваш MySQL сервер","логин к этому серверу","пароль к этому серверу");
        mysql_select_db ("имя базы, к которой подключаемся",$db);
        ?>
Сначала была ошибка со страницей "соединения" с БД. Пошерстив немного интернет, узнал, что php7 более не поддерживат модуль mysql и лучше использовать некий PDO в результате, благодаря тому же гуглу, нашел решение в данном виде:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    $host = 'localhost';
    $db   = 'mysite';
    $user = 'root';
    $pass = '1';
    $charset = 'cp1251';
 
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    ?>
Пока что, мне не совсем понятно, для чего тут $opt и то он делает, но, речь не об этом, ошибка сменилась на другую, а именно, на эту.

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in D:\Apache24\localhost\www\save_user.php on line 25

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in D:\Apache24\localhost\www\save_user.php on line 26

Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\Apache24\localhost\www\save_user.php on line 31
Подскажите, пожалуйста, что и каким образом лучше исправить и, если это никого не затруднит, объяснить более-менее понятным языком в чем я дурак помимо того, что зря полез в дебри web программирования и php в частности и что не так делаю? Спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2017, 20:47
Ответы с готовыми решениями:

Warning: mysqli_query() expects parameter 1 to be mysqli, null given
Здравствуйте. Как исправить эти ошибки &quot; Warning: mysqli_real_escape_string() expects exactly 2...

WARNING: MYSQLI_QUERY() EXPECTS PARAMETER 1 TO BE MYSQLI, NULL GIVEN IN
Помогите пожалуйста! Вот так не работает. Убираю функцию, напрямую все работает function...

Warning: mysqli_query() expects parameter 1 to be mysqli, string given
PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in...

Warning: mysqli_query() expects parameter 1 to be mysqli, string given
Помогите с ошибками Warning: mysqli_query() expects parameter 1 to be mysqli, string given in...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Fullstack-разработчиков на PHP‌
6
502 bad gateway
Эксперт PHP
4500 / 3661 / 1538
Регистрация: 24.04.2014
Сообщений: 10,783
21.06.2017, 21:36 2
Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Подскажите, пожалуйста, что и каким образом лучше исправить
Нужно использовать или PDO или mysqli, но не одновременно
Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Пока что, мне не совсем понятно, для чего тут $opt и то он делает
Мне тоже. Эти параметры задаются с помощью метода setAttribute
1
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
21.06.2017, 21:51  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Нужно использовать или PDO или mysqli, но не одновременно
Как будет правильно переписать эти строчки для PDO?

PHP
1
2
 $result = mysqli_query("SELECT id FROM users WHERE login='$login'",$db);
    $myrow = mysqli_fetch_array($result);
и

PHP
1
 $result2 = mysqli_query ("INSERT INTO users (login,password,mail) VALUES('$login','$password','$mail')");
Честно пытался разобраться, но ничего не понял(

Добавлено через 7 минут
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Нужно использовать или PDO или mysqli, но не одновременно
Заменить на

PHP
1
2
 $result = PDO::query("SELECT id FROM users WHERE login='$login'",$db);
    $myrow = PDO::fetch_array($result);
и

PHP
1
[PHP] $result2 = PDO::query ("INSERT INTO users (login,password,mail) VALUES('$login','$password','$mail')");
[/PHP]

Привело к
Fatal error: Uncaught Error: Non-static method PDO::query() cannot be called statically
0
шКодер самоучка
2127 / 1843 / 902
Регистрация: 09.10.2013
Сообщений: 4,029
Записей в блоге: 7
21.06.2017, 21:53 4
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Мне тоже. Эти параметры задаются с помощью метода setAttribute
необязательно - можно передавать массивом в конструктор.
Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Как будет правильно переписать эти строчки для PDO?
1)
PHP
1
2
3
$query = $pdo->prepare("SELECT id FROM users WHERE login=:login");
$query->execute(array(':login' => $login));
$myrow = $query->fetch();
2)
PHP
1
2
3
4
5
6
7
$insertSQL = "INSERT INTO users (login,password,mail) VALUES(:login,:password,:mail)";
$query = $pdo->prepare($insertSQL);
$query->execute(array(
    ':login' => $login,
    ':password' => $password,
    ':mail' => $mail
));
2
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
21.06.2017, 22:07  [ТС] 5
Спасибо большое добрый человек, если не сложно, последний вопрос.

поскольку "$result2" больше нет, нужно как-то выводить сообщение о том, прошла регистрация или нет, данное условие больше не подходит

PHP
1
2
3
4
5
6
7
if ($result2=='TRUE')
    {
    echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>";
    }
 else {
    echo "Ошибка! Вы не зарегистрированы.";
    }
Как это теперь реализовать?)
0
шКодер самоучка
2127 / 1843 / 902
Регистрация: 09.10.2013
Сообщений: 4,029
Записей в блоге: 7
21.06.2017, 22:24 6
Лучший ответ Сообщение было отмечено SILEDKA112 как решение

Решение

Цитата Сообщение от SILEDKA112 Посмотреть сообщение
Как это теперь реализовать?)
Когда выставлена настройка PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION нужно её "ловить" в try-catch
Иначе проверять, что вернул метод execute
Примерно так
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$success = false;
try
{
    $insertSQL = "INSERT INTO users (login,password,mail) VALUES(:login,:password,:mail)";
    $query = $pdo->prepare($insertSQL);
    $success = $query->execute(array(
        ':login' => $login,
        ':password' => $password,
        ':mail' => $mail
    ));
}
catch(\PDOException $e)
{
}
?>
 
<?php if ($success): ?>
Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>
<?php else: ?>
Произошла ошибка. Вы не зарегистрированы.
<?php endif; ?>
1
0 / 0 / 1
Регистрация: 11.08.2015
Сообщений: 18
21.06.2017, 22:51  [ТС] 7
Цитата Сообщение от Max Dark Посмотреть сообщение
Когда выставлена настройка PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION нужно её "ловить" в try-catch
Иначе проверять, что вернул метод execute
Примерно так
Спасибо огромное, вроде разобрался, всё работает по крайней мере.)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2017, 22:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка - Warning: mysqli_query() expects parameter 1 to be mysqli, resource given
Что-то не так на 8 строке и 10 строке, не понимаю что, уже 15 минут не могу разобраться. &lt;?php...

Ошибка: Warning: mysqli_query() expects parameter 1 to be mysqli, string given
Всем привет, помогите с ошибкой, совсем новичок, поправьте меня. Благодарю! Ошибки: Warning:...

Ошибка Warning: mysqli_query() expects parameter 1 to be mysqli, string given in
Добрый день, знатокам. На сайте столкнулся с проблемой при создании регистрации. Месяцев 7-8...

Ошибка Warning: mysqli_query() expects parameter 1 to be mysqli, null given in
При обновление кода под версию php 7 возникли ошибки. Warning: mysqli_query() expects parameter...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.