Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Wyszukiwanie ilości występowanie liczb zbazy danych
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
b4rt3kk
Musisz znów przekształcić tablicę do postaci stringa, tak żeby móc je wstawić do zapytania:

  1. $ount = current($conn->query("SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = 2)")->fetch());


Może wydaje Ci się to bez sensu, że rozbijasz to w tablicę, żeby później znów złożyć, ale iż jest to wartość przekazywana przez użytkownika, a później bezpośrednio wstawiana do zapytania, to musisz mieć absolutną pewność, że wartości są prawidłowe.

Dlatego filtrujesz tablicę:

  1. $lop = array_filter(explode(',', $_POST['liczby']), 'is_numeric');


To takie minimalne minimum.
woxala123
Teraz jak ty mi pisałeś to przerobięm to wren sposób ze zlicza lizby le wpisałem w polu input jesli dwie to dwie
php]
$sql = $conn->prepare("SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN ( $wielkosc_tablicy ) GROUP BY id_los HAVING COUNT(id_los) = 2)")->fetch();
echo "<p> </p>";
echo "Podana liczba to";
echo - $wielkosc_tablicy;
echo "<p> Wystąpiła razy $sql: </p>";

[/php]
ale teraz przerobie na twoje zapytanie
  1. $ount = current($conn->query("SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = 2)")->fetch());
  2. echo "<p> </p>";
  3. echo "Podana liczba to";
  4. echo -$_POST['liczby'];
  5. echo "<p> Wystąpiła razy $ount: </p>";

i wywala błąd
Error: Call to a member function fetch() on boolean in os.php on line 34
b4rt3kk
To ma być dynamiczne, a nie wprowadzone na sztywno:

  1. $ount = current($conn->query("SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = {$wielkosc_tablicy})")->fetch());
woxala123
Przy tym zapytaniu też wywala błąd
Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\suzo\los.php on line 33
Call Stack
b4rt3kk
Cytat(woxala123 @ 22.08.2017, 20:13:46 ) *
Przy tym zapytaniu też wywala błąd
Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\suzo\los.php on line 33
Call Stack


Bo jest błąd w zapytaniu. Pierwszą rzecz jaką robisz w takim przypadku, to debugujesz i dopiero z konkretną informacją przychodzisz na forum.

Przerzuć sobie treść zapytania do zmiennej (tak by można to było wyświetlić):

  1. $query = "SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = {$wielkosc_tablicy})";
  2. $ount = current($conn->query($query)->fetch());
  3.  
  4. // wyświetlenie treści zapytania
  5. echo $query . '<br/>';
  6. // wyświetlenie błędu SQL
  7. var_dump($conn->errorInfo());


EDIT:

Zauważyłem, że nie masz aliasu:

  1. $query = "SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = {$wielkosc_tablicy}) t";
woxala123
  1. $query = "SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = {$wielkosc_tablicy})";
  2. $ount = current($conn->query($query)->fetch());
  3.  
  4. // wyświetlenie treści zapytania
  5. echo $query . '<br/>';
  6. // wyświetlenie błędu SQL
  7. var_dump($conn->errorInfo());
  8.  

i to samo nie wiem co tu jest grane
Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\suzo\los.php on line 33

A teraz robię coś takiego-cały kod i pokazuje
  1. lop = array_filter(explode(',', $_POST['liczby']), 'is_numeric');
  2. $wielkosc_tablicy = sizeof($lop);
  3.  
  4.  
  5.  
  6.  
  7. $db = "SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM ado.liczby WHERE liczba IN (" . implode(',', $lop) . ") GROUP BY id_los HAVING COUNT(id_los) = {$wielkosc_tablicy}) t";
  8. $query = current($conn->query($db)) ;
  9. try {
  10. } catch (Exception $e) {
  11. echo $e->getMessage();
  12. }
  13. // wyświetlenie treści zapytania
  14. echo $db . '<br/>';
  15. var_dump($conn->errorInfo());
  16.  


( ! ) Warning: current() expects parameter 1 to be array, boolean given in C:\xampp\htdocs\suzo\los.php on line 36
Call Stack
# Time Memory Function Location
1 0.0007 357208 {main}( ) ...\los.php:0
2 0.0090 371456 current ( ) ...\los.php:36
SELECT COUNT(*) FROM (SELECT COUNT(id_los) FROM ado.liczby WHERE liczba IN (21,67) GROUP BY id_los HAVING COUNT(id_los) = 2) t

C:\xampp\htdocs\suzo\los.php:43:
array (size=3)
0 => string '42S02' (length=5)
1 => int 1146
2 => string 'Table 'ado.liczby' doesn't exist' (length=32)
nospor
Przeciez masz jak wol podane:
Table 'ado.liczby' doesn't exist
Czego nie rozumiesz?
woxala123
Witam
Temat rozwiązany. Cały czas zastanawiałem się co jest przyczyną że brakuje tabeli liczby. W zapytaniu które podał kolega b4rt3kk brakowało w nazwie tabeli `` takiego czegoś.
Pozdrawiam i dziękuje szczególnie nosporowi który napisał jak wol czego nie rozumiesz. Duże słowa uznania dla kolegi b4rt3kk.

Ps. Teraz będę pracował nad formularzem wstawiania losowań do bazy oraz żeby pokazał kiedy były one wylosowane.
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.