Mysql fetch assoc ошибка

В коде не могу разобраться почему скрипт не выводит картинки. А выдает ошибку » Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:OpenServerdomainslocalhostlessonsphpindex.php on line 33″
Ошибка как вы поняли находится на 33 строчке или на 36, просто код скопировал без html каркаса.

$connection = mysql_connect('localhost', 'Heartofprogramme', '123321');
         $db = mysql_select_db('test_db');

         if(!$connection || !$db){
            exit(mysql_close());
         }

         $result = mysql_query(" SELECT * FROM news LIMIT 3");

         mysql_close();

         while($row = mysql_fetch_assoc($result)): ?>
         <div class="items_news">
           <h1><? echo $row['title']?></h1>
           <p class="text"><?  echo $row['text']?></p>
           <p class="date">Дата публикации: <?  echo $row['date']?></p>
           <p class="time">Время публикации: <?  echo $row['time']?></p>
           <p class="author">Автор статьи: <?  echo $row['author']?>
         </div>
         <? endwhile;

         // Код картинки!

         $connection = mysql_connect('localhost', 'Heartofprogramme', 'ahmedborec');
         $db = mysql_select_db('test_db');

         if(!$connection || !$db){
            exit(mysql_close());
         }

         $result_two = mysql_query(" SELECT * FROM img where order by id ");

            mysql_close();

            while($row_two = mysql_fetch_assoc($result_two)){
              $avatar = $row_two['avatar'];
              $description = $row_two['description'];
              echo "
                      <img src='avatar/$avatar'>
                      <p>$description</p>
                   ";
            }
			 	?>


  • Вопрос задан

    более трёх лет назад

  • 7500 просмотров

$result_two = mysql_query(" SELECT * FROM img where order by id ");

ошибка в синтаксисе, уберите where или добавьте условие.

Пригласить эксперта

Так вы сначала соединение закрыли, а потом пробуете оттуда что-то достать…
И выбросьте mysql, используйте mysqli.

$result = mysql_query($connection, " SELECT * FROM news LIMIT 3");

Начнем с того, что $result_two=false. Почему? А потому, что ошибка при запросе. Не учили после каждого query проверять на ошибки?

Почему ошибка при запросе? Потому что не пишут «Выбрать все из ньюс где сортировать», на кой там where?

И последнее. Зачем верите тостеру, больше чем документации?
Вам пишут mysql_query($connection… и вы слепо пробуете, хотя в документации четко сказано mysql_query(query_string).


  • Показать ещё
    Загружается…

04 июн. 2023, в 01:35

1500 руб./за проект

04 июн. 2023, в 01:25

40000 руб./за проект

03 июн. 2023, в 23:42

1500 руб./за проект

Минуточку внимания

Данная ошибка возникает тогда, когда запрос к базе данных, переданные в параметре функции mysql_fetch_assoc вернул неудачу( FALSE ), вместо набора записей из БД или успеха( при модификации набора данных, например ), TRUE. Сам запрос выглядит немножко подозрительно. Это, наверное, потому, что я не знаю структуры вашей таблицы. А этот блок кода вообще ужасен:

  unset($func_get_args[0]);
  $fields = '`' . implode('`, `', $func_get_args) . '`'; // здесь вы, не окажется запятых между полями...скорее, потому и ошибка. И вообще, возьмите к примеру, первое поле массива. Оно будет такого вида в миссиве **'`field'**, потому что это **'`, `'** не всегда будет верно...

  $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

Одно только:

  $fields = '`' . implode('`, `', $func_get_args) . '`';

Сколько печали мне принесло…


Попробуйте заменить на это:

unset($func_get_args[0]);
$fields = implode(',', $func_get_args); // бьем поля по запятым, вместо вашего ужаса.
$fields = mysql_real_escape_string($func_get_args[0]); // подготавливаем к запросу.

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id")); // запросим

А вообще лучше не создавать себе геморроя с этими полями, ведь можно выделить все поля, это будет работать практически также быстро, как и ваш implode()

Here there are two things you have to notice :

1) the warning with mysql_fetch_assoc() .
This warning will occur when the argument passed to it is not an vaide mysql resource ,ie,
the mysql_connect() returned null object(failed to return conection object) . This inturn is caused due to fact that arguments passed to mysql_connect() are bad database credentials.

this case is usualy traped by using

is_resource($con) 

call which returns true if $con is an valid resource.

2) The error as described in the error discription is due to bad syntax of query.

"SELECT * FROM logs WHERE log_name='$report_id"  

here you ommited closing brace for $report_id

"SELECT * FROM logs WHERE log_name='$report_id'"

3) data base access :
An generel method of accesing database is by using an class , that access the database credentials through Accessor methods like setUname() , SetPasswd() etc , where the method itself will trim , escape and sanitize the credentials before it is passed to database.
this will prevent sql injection attack

In this guide, we will discuss how to fix the mysql_fetch_assoc() error that occurs when the first parameter is expecting a resource instead of a boolean. This error usually occurs when there is a problem with the SQL query, and the mysql_query() function returns false. We will go through the possible causes of this issue and provide step-by-step solutions to resolve the error.

Table of Contents

  1. Understanding the Error
  2. Identifying the Causes
  3. Step-by-Step Solutions
  4. FAQs
  5. Related Links

Understanding the Error

The mysql_fetch_assoc() function is used to fetch a result row as an associative array in PHP. The function expects a resource as its first parameter, which is obtained from the mysql_query() function. If the mysql_query() function returns false, it indicates that there is an error in the SQL query, and the mysql_fetch_assoc() function will generate the following error:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

Identifying the Causes

There are several possible causes for this error. Some of the most common reasons are:

  1. Syntax errors in the SQL query
  2. Incorrect table or column names
  3. Insufficient user privileges for the database
  4. Connection to the database has not been established

Step-by-Step Solutions

To resolve the mysql_fetch_assoc() error, follow the steps below:

Step 1: Check SQL Query Syntax

Make sure your SQL query syntax is correct. You can verify the syntax by running the query directly in your database management tool (e.g., phpMyAdmin). If there are any syntax errors, correct them and update the query in your PHP code.

Step 2: Verify Table and Column Names

Ensure that the table and column names used in the SQL query match the actual names in your database. Table and column names are case-sensitive, so make sure to use the correct case.

Step 3: Check User Privileges

Verify that the database user has the necessary privileges to execute the SQL query. You can check the user’s privileges in your database management tool or by running a SHOW GRANTS query in your SQL console.

Step 4: Establish Database Connection

Make sure you have established a connection to the database before executing the SQL query. Use the mysql_connect() function to connect to the database and the mysql_select_db() function to select the desired database.

$connection = mysql_connect("localhost", "username", "password");
mysql_select_db("database_name", $connection);

After following these steps, your mysql_fetch_assoc() error should be resolved.

FAQs

Why is the mysql_* function deprecated?

The mysql_* functions are deprecated since PHP 5.5.0 and removed in PHP 7.0.0. These functions are replaced with the more secure and efficient alternatives like MySQLi and PDO. It is recommended to use these alternatives for better security and performance.

How can I switch to MySQLi from the deprecated mysql_* functions?

To switch to MySQLi, you can follow these steps:

  1. Replace mysql_connect() with mysqli_connect().
  2. Replace mysql_select_db() with mysqli_select_db().
  3. Replace mysql_query() with mysqli_query().
  4. Replace mysql_fetch_assoc() with mysqli_fetch_assoc().
  5. Update other mysql_* functions with their respective MySQLi counterparts.

How can I display the actual error message from the SQL query?

To display the actual error message from the SQL query, you can use the mysql_error() function as follows:

$result = mysql_query($query);
if (!$result) {
    die('Error: ' . mysql_error());
}

How can I prevent SQL injection in my PHP code?

To prevent SQL injection, you should use prepared statements or parameterized queries. These features are available in both MySQLi and PDO. By using prepared statements, you can avoid including user input directly in the SQL query, which reduces the risk of SQL injection attacks.

Can I use the mysql_fetch_assoc() function with other database systems, such as PostgreSQL or SQLite?

The mysql_fetch_assoc() function is specific to the deprecated MySQL extension in PHP. To work with other database systems, you should use the appropriate PHP extension, such as PDO or the specific extension for the database system (e.g., pg_fetch_assoc() for PostgreSQL).

  • PHP: MySQL (Original) — Manual
  • PHP: MySQLi — Manual
  • PHP: PDO — Manual
  • How to Fix PHP Deprecated Features

Note: This guide is for educational purposes only, and it is recommended to switch to the more secure and efficient MySQLi or PDO extensions for working with databases in PHP.

LLIAKAJI

0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

1

22.07.2012, 12:47. Показов 19806. Ответов 16

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:webxampphtdocswwwcorefunctionsusers.php on line 12

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function user_data($user_id)
{
    $data          = array();
    $user_id       = (int) $user_id;
    $func_num_args = func_num_args();
    $func_get_args = func_get_args();
 
    if ($func_num_args > 1) {
        unset($func_get_args[0]);
        $fields = '`' . implode('`, `', $func_get_args) . '`';
 
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
 
        print_r($data);
        die();
        return $data;
    }        
}



0



KOPOJI

Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:05

2

бог ты мой..
1. проверьте подключение к серверу бд и выбор базы данных.
2. вот это

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

PHP
1
2
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
print_r($data);

поменяйте на хотя бы вот такое..

PHP
1
2
3
4
$res = mysql_query("SELECT $fields FROM `users` WHERE `user_id` = '$user_id'") or die(mysql_error());
while($data = mysql_fetch_assoc($res)) {
print_r($data); echo "<BR>";
}



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:09

 [ТС]

3

теперь другая ошибка Unknown column ‘first_name’ in ‘field list’
в базе это поле есть



0



Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:11

4

такая ошибка возникает из за того, что mysql_query вернула не указатель на результат, а boolean (булевый, логический тип) — т.е. false. и этот самый нехороший false пошел дальше в mysql_fetch_assoc(), а тот ну ни в какую не хочет с ним дружить, представляешь?)

Добавлено через 1 минуту
нету там такого поля или оно называется по другому



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:11

 [ТС]

5

почему на видео уроке дружет, а у меня не дружет??

в базе такое поле есть, а если надо добавить то куда именно?(в коде)



0



13207 / 6595 / 1041

Регистрация: 10.01.2008

Сообщений: 15,069

22.07.2012, 13:12

6

Если говорит, что нет, значит нет.



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:13

 [ТС]

7

Цитата
Сообщение от Vovan-VE
Посмотреть сообщение

Если говорит, что нет, значит нет.

это не аргумент, должно быть логическое объяснение



0



KOPOJI

Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:14

8

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

почему на видео уроке дружет, а у меня не дружет??

она и там бы не дружила, если бы поле с таким именем отстутствовало. проверьте как у вас называется поле в таблице еще раз, и если все одинаково — то сделайте вот так и посмотрите какой запрос уходит в базу:

PHP
1
2
$query = "SELECT $fields FROM `users` WHERE `user_id` = $user_id";
var_dump($query);



0



LLIAKAJI

0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:16

 [ТС]

9

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

она и там бы не дружила, если бы поле с таким именем отстутствовало. проверьте как у вас называется поле в таблице еще раз, и если все одинаково — то сделайте вот так и посмотрите какой запрос уходит в базу:

PHP
1
2
$query = "SELECT $fields FROM `users` WHERE `user_id` = $user_id";
var_dump($query);

string(109) «SELECT `user_id`, `username`, `password`, `first_name`, `last_name`, `email` FROM `users` WHERE `user_id` = 1»

вот такое пигет на этот код



0



Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:17

10

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

это не аргумент, должно быть логическое объяснение

оно есть. два пути
1. оно называется в таблице как то по другому.
2. вы передаете неправильное имя в коде.
3. вследствии 2 пункта — ругается на неизвестное поле — решается проверкой (выводом текста запроса на экран перед самим запросом)

Добавлено через 1 минуту

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

first_name

значит, еще раз — нету такого поля в таблице, оно называется как то по другому.



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:21

 [ТС]

11

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

оно есть. два пути
1. оно называется в таблице как то по другому.
2. вы передаете неправильное имя в коде.
3. вследствии 2 пункта — ругается на неизвестное поле — решается проверкой (выводом текста запроса на экран перед самим запросом)

Добавлено через 1 минуту

значит, еще раз — нету такого поля в таблице, оно называется как то по другому.

в таблице и в коде все едентично, ведь до этого все выводило!

Добавлено через 2 минуты

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

оно есть. два пути
1. оно называется в таблице как то по другому.
2. вы передаете неправильное имя в коде.
3. вследствии 2 пункта — ругается на неизвестное поле — решается проверкой (выводом текста запроса на экран перед самим запросом)

Добавлено через 1 минуту

значит, еще раз — нету такого поля в таблице, оно называется как то по другому.

в какой именно таблице в БД оно есть



0



Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:25

12

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

в какой именно таблице в БД оно есть

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



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:28

 [ТС]

13

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

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

какой шар, какие экстрасенсы, я четко и ясно сказал что в БД оно есть, и спросил как добавить first_name в PHP код если надо?

вот все поля из ДБ вывод sql `password`SELECT * FROM `users` WHERE 1`user_id`, `username`, `password`, `firsr_name`, `last_name`, `email`, `active`



0



Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:32

14

Цитата
Сообщение от LLIAKAJI
Посмотреть сообщение

`user_id`, `username`, `password`, `firsr_name`, `last_name`, `email`, `active`

вот именно!!! либо в запросе переименуйте на такое название, либо в таблице поле поменяйте на first_name



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:34

 [ТС]

15

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

вот именно!!! либо в запросе переименуйте на такое название, либо в таблице поле поменяйте на first_name

а конкретней как это поменять в запросе и вместо чего?



0



Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

22.07.2012, 13:36

16

я не знаю где у вас в запросе переменная $fields записывается значениями
и кстати лучше поменять в таблице имя поля (переименовать) — потому что правильно писать firsT а не firsR



0



0 / 0 / 2

Регистрация: 06.01.2012

Сообщений: 71

22.07.2012, 13:40

 [ТС]

17

Цитата
Сообщение от KOPOJI
Посмотреть сообщение

я не знаю где у вас в запросе переменная $fields записывается значениями
и кстати лучше поменять в таблице имя поля (переименовать) — потому что правильно писать firsT а не firsR

о спасибо большое, я и не заметил что в БД ошибка, а в коде правильно было написано, вот что значит в час ночи задротничать программированием)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

22.07.2012, 13:40

17

Понравилась статья? Поделить с друзьями:
  • Mysql 134 ошибка
  • Mysql 1089 ошибка
  • Mysql 1055 ошибка
  • Mysql 1045 ошибка 1045 password yes
  • Myphoneexplorer ошибка obex errorcode c1 unauthorized