Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Błąd przy próbie wyświetlenia bazy danch przez skrypt PHP
Forum PHP.pl > Forum > Przedszkole
mattajah
Witam,
napisałem kod, który ma za zadanie wyświetlić wartości pobrane z bazy MySQL.
Przy wyświetlaniu wyskakuje mi błąd mysql_fetch_array() expects parameter 1 to be resource, object given in... (45 linijka kodu)
Generalnie podczas pisania w PHP kilka razy ten błąd mi się powtarzał, w różnych miejscach.
Prosiłbym o wytłumaczenie skąd się taki błąd bierze i jak go poprawić.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9. <?php
  10. //połączenie z bazą
  11. @ $kontakt = new mysqli("localhost", "user1", "user1", "hurtownia");
  12.  
  13. if (mysqli_connect_errno()){
  14. echo "Błąd: Połączenie z bazą danych nie powiodło się, spróbuj ponownie później.";
  15. }
  16.  
  17. $zapytanie = "select * from produkty";
  18. $wynik = $kontakt->query($zapytanie);
  19.  
  20. if ($wynik) {
  21. echo $kontakt->affected_rows." produkt zapisany do bazy.";
  22. } else {
  23. echo "Wystąpił błąd z połączeniem!";
  24. }
  25. ?>
  26.  
  27. <table width="400" border="0" cellspacing="1" cellpadding="0">
  28. <tr>
  29. <td>
  30. <table width="400" border="1" cellspacing="0" cellpadding="3">
  31. <tr>
  32. <td align="center" colspan="10"><strong>Produkty</strong> </td>
  33. </tr>
  34.  
  35. <tr>
  36. <td align="center"><strong>ID</strong></td>
  37. <td align="center"><strong>Nazwa</strong></td>
  38. <td align="center"><strong>Producent</strong></td>
  39. <td align="center"><strong>Kategoria</strong></td>
  40. <td align="center"><strong>Cena</strong></td>
  41. </tr>
  42.  
  43. <?php
  44. while($rows=mysql_fetch_array($wynik)){
  45. ?>
  46.  
  47. <tr>
  48. <td><?php echo $rows['ID_prod']; ?></td>
  49. <td><?php echo $rows['nazwa']; ?></td>
  50. <td><?php echo $rows['producent']; ?></td>
  51. <td><?php echo $rows['ID_kat']; ?></td>
  52. <td><?php echo $rows['cena']; ?></td>
  53. <td align="center"><a href="update.php?id=<?php echo $rows['id']; ?>">Aktualizuj</a></td>
  54. <td align="center"><a href="delete_ac.php?id=<?php echo $rows['id']; ?>">Usuń</a> </td>
  55. <td align="center"><a href="add.php?id=<?php echo $rows['id']; ?>">Dodaj</a></td>
  56. </tr>
  57.  
  58. <?php
  59. }
  60. ?>
  61.  
  62. </table>
  63. </td>
  64. </tr>
  65. </table>
  66.  
  67. <?php
  68. $kontakt->close();
  69. ?>
  70. </body>
  71. </html>


Jeżeli jest to jakaś prosta sprawa to proszę o wyrozumiałość, jestem bardzo początkujący wink.gif
Kshyhoo
Mieszasz klasę MySQLi z MySQL, jak mniemam.
mattajah
Dokładnie o to chodziło, teraz działa, dzięki Kshyhoo smile.gif

Mam też jeszcze jedno pytanie dotyczące tego kodu

Analizując wiele skryptów PHP często spotykałem konstrukcję taką właśnie:
<a href="update.php?id=<?php echo $rows['id']; ?>

Jest to jakaś standardowa konstrukcja do tego, aby "przechwytywać" ID konkretnego rekordu?
Przyznam, że tą część akurat od kolegi mam i próbuję ją rozgryźć.
Czy jako ID jest przekazywany numer wiersza w tabeli, czy unikalne ID z tabeli MySQL?
Chociaż w sumie nie jest to tak ważne, bo w tabeli przycisk usuń czy edytuj stoi w konkretnym wierszu, więc zawsze będzie się odnosił do niego.


Turson
Cytat
Czy jako ID jest przekazywany numer wiersza w tabeli, czy unikalne ID z tabeli MySQL?

i jedno i drugie
mattajah
Mam jeszcze jeden problem, zrobiłem skrypt, który służy do wyszukiwania danych w bazie MySQL.
Niestety za każdym razem zwraca mi 2 błędy:

Cytat
Trying to get property of non-object in .... on line 29 oraz
oraz
Cytat
Fatal error: Call to a member function free() on a non-object in ... on line 46


Próbowałem zmienić połączenie i wszystkie inne linijki w kodzie gdzie jest związek z mysql z obiektowego ( $db = new mysqli) na proceduralne ($db = mysqli_connect) i nie pomaga.

  1. <?php
  2. //utworzenie krótkich nazw zmiennych
  3. $met_szukania = $_POST['met_szukania'];
  4. $wyrazenie = trim($_POST['wyrazenie']);
  5.  
  6. $wyrazenie = trim($wyrazenie);
  7.  
  8. if (!$met_szukania || !$wyrazenie){
  9. echo 'Brak parametrów wyszukiwania, wróć do poprzedniej strony.<br />';
  10. echo "<a href='wyszukaj.php'>Powrót</a>";
  11. }
  12.  
  13. $met_szukania = addslashes($met_szukania);
  14. $wyrazenie = addslashes($wyrazenie);
  15. }
  16. //połączenie z bazą
  17. @ $db = new mysqli('localhost', 'user1', 'user1', 'hurtownia');
  18.  
  19. if (mysqli_connect_errno()){
  20. echo "Błąd: Połączenie z bazą danych nie powiodło się, spróbuj ponownie później.";
  21. }
  22. //zapytanie
  23. $zapytanie = "select * from produkty where " .$met_szukania. "like '%".$wyrazenie."%'";
  24. $wynik = $db->query($zapytanie);
  25.  
  26. $ilosc = $wynik->num_rows;
  27.  
  28. echo "<p>Ilość znalezionych pozycji: ".$ilosc."</p>";
  29.  
  30. for ($i=0; $i<$ilosc; $i++) {
  31. $wiersz = $wynik->fetch_assoc();
  32. echo "<p><strong>".($i+1)." . Produkt: ";
  33. echo stripslashes($wiersz['nazwa']);
  34. echo "<strong><br>Producent: ";
  35. echo stripslashes($wiersz['producent']);
  36. echo "<br>Kategoria: ";
  37. echo stripslashes($wiersz['ID_kat']);
  38. echo "<br>Cena: ";
  39. echo stripslashes($wiersz['cena']);
  40. echo "</p>";
  41. }
  42.  
  43. $wynik->free();
  44. $db->close();
  45. ?>
nospor
Masz blad zapytania. Wyswietl go sobie oraz wyswietl zapytanie ktore generujesz. Moze sam dojdziesz gdzie masz ten banalny blad
mattajah
Kurcze, jedyne co rozumiem z tego to jest to, że próbuje odwołać się do czegoś co nie jest obiektem w sposób obiektowy (chyba).
Jestem dość bardzo początkujący, ciężko mi jeszcze wyłapywać wszystkie błędy.
nospor
Czy ja pisze po chinsku? Napisalem wyraznie, bys sobie wyswietlil zapytanie ktore generujesz, a moze sam wpadniesz co masz zle... nie karze ci przeciez wrozuc z fusow....

$zapytanie = "select * from produkty where " .$met_szukania. "like '%".$wyrazenie."%'";
echo $zapytanie; //TO JEST WYSWIETLENIE ZAPYTANIA. PRZYJRZYJ SIE NA STRONIE CO CI O ZWROCI
mattajah
Zrobiłem jak mówisz, wyświetliłem to zapytanie i później zrobiłem odstęp między między cudzysłowem a like i działa.
Bez tego odstępu wychodziło NAZWALIKE i pewnie nie wiedział jak to zinterpretować.
Dzięki.
nospor
Cytat
Bez tego odstępu wychodziło NAZWALIKE i pewnie nie wiedział jak to zinterpretować.
Wlasnie o ten brak spacji mi chodzilo. Na przyszlosc sam sprawdzaj jak wygladaja zapytania przez ciebie generowane i czytaj bardziej uwazniej co do Ciebie piszą.

A tu masz lekture obowiązkową z przydatnymi informacjami.
Temat: Jak poprawnie zada pytanie
mattajah
Przeczytałem, będę się stosował do zaleceń, dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.