Jak przeszukać tabelę SQL

Jak przeszukać tabelę SQL
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Cześć. Da się w PHP np. w foreach, przeszukać tabelę SQL? Jeśli tak, to jak?

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
2

Nie możesz czegoś takiego połączyć. Musisz najpierw coś wyciągnąć z bazy. Jeżeli twoim celem jest stworzenie czegoś takiego:

Kopiuj
SELECT * FROM table_name WHERE anything LIKE "%xyz%"

to musisz najpierw pobrać kolumny z danej tabeli:

Kopiuj
SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='nazwa_bazy' 
    AND `TABLE_NAME`='nazwa_tabeli';

A później zrobić zapytanie na zasadzie:

Kopiuj
SELECT * FROM nazwa_tabeli
WHERE kolumna1_z_zapytania_wyzej LIKE "%xyz%"
OR kolumna2_z_zapytania_wyzej LIKE "%xyz%"
OR kolumna3_z_zapytania_wyzej LIKE "%xyz%"
... 
edytowany 2x, ostatnio: Desu
A1
W żadnym poradniku internetowym nie było, żeby najpierw pobierać kolumny. I ja też nie do końca rozumiem po co.
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Nie bardzo rozumiem... Skąd mam wiedzieć np. jak nazywa się pierwsza kolumna...?

0

no przecież Ci napisał:

Kopiuj
SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='nazwa_bazy' 
    AND `TABLE_NAME`='nazwa_tabeli';

wyciąga nazwy kolumn
potem z nazw kolumn sobie składasz zapytanie

A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Ok. Poczytam sobie o tych operatorach, bo kompletnie nie znam się na MySQL :P Dzięki.

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
0
edytowany 2x, ostatnio: dzek69
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Jeszcze pytanie. Jak znaleźć w tabeli konkretny wyraz, sprawdzić w którym jest wierszu i sprawdzić jakie są wyrazy w kolumnach obok niego, w tym samym wierszu. Jest 8 kolumn i niewiadoma liczba wierszy.

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
1

@Adamek161 jaja sobie robisz? Pytając o takie rzeczy okazujesz brak szacunku dla nas i naszego czasu. To elementarna wiedza i miałbyś gotową odpowiedź po przeczytaniu np. tego http://www.w3schools.com/sql/sql_select.asp

Nie mówię tego bo jestem złośliwy, tylko 99,99% pytań początkujących zostało już rozwiązanych. Początkujący mało kiedy wymyśli coś tak skomplikowanego, żeby wymagało to interwencji innych doświadczonych głów, tylko po prostu jest leniwy i boi się zajrzeć do manuala.

The first step is thus to search Google. This step alone should answer 95% or more of your questions so, as basic as this sounds, we cannot emphasis this enough: FIRST SEARCH GOOGLE. For example, if you received an error message from the program you are trying to use, cut and paste the message directly into Google. Posting a forum question that could have been easily answered with a simple Google search is often seen as disrespectful of other users, and such a question will potentially be closed or deleted on many forums. If Google did not return a satisfactory answer, the next step is to read the manual of the program you are trying to use. If your question is about a file format, find and read the documentation of the format. If there is a Frequently Asked Questions (FAQ), you should definitely read that too. As the name implies, this document lists questions that come up frequently, so yours may be answered in there. For the manual, the FAQ or wiki site of the program, search for keywords that are related to your question. If you still have no answer, you should experiment some more and try to solve your problem yourself and ask for the help of a friend or colleague.

If you still are without an answer, you clearly need to post a question and you should find an appropriate forum to ask it. Once again, Google should be helpful. It is important to search the forum to see if the question has already been asked and answered, as is often the case.

https://www.biostars.org/p/75548/

edytowany 2x, ostatnio: Desu
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Dobra, przepraszam. Nie zdaje sobie z tego sprawy. No, to w końcu jest forum. Nie mogłem znaleźć, to zapytałem. Myślę, że znalazłem odpowiedź.

A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

To jeżeli trzeba najpierw pobrać kolumny, to to http://www.eioba.pl/a/1lnn/obsluga-mysqla-w-php i to http://php.net/manual/pl/function.mysql-fetch-rów.php Przykład #1 by nie zadziałało?

DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
1

W żadnym poradniku internetowym nie było, żeby najpierw pobierać kolumny. I ja też nie do końca rozumiem po co. -

Chcesz przeszukać tabelę i pobrać konkretny wiersz, w którym to słowo występuje. W SQL robisz to za pomocą klauzuli WHERE, ale musisz sprecyzować WHERE co? Nie możesz zrobić WHERE cokolwiek LIKE "%xyz%" (gdzieś chyba widziałem, że ktoś coś takiego wykombinował, ale było to podobno bardzo mało wydajne). Musisz zrobić WHERE nazwa_kolumny LIKE "%xyz%". Tylko, że jak podasz np. kolumnę name to szukasz tylko po wartościach w kolumnie name, a Ty chciałeś przeszukać całą tabelę, więc masz dwa wyjścia.

Wyjście nr 1) Z palca wypisać wszystkie kolumny, bo np. zajrzysz sobie do bazy i wiesz jakie te kolumny są i wtedy robisz warunki tak jak Ci wyżej napisałem albo
Wyjście (bardziej uniwersalne) nr 2) Pobierasz NAZWY KOLUMN z danej tabeli czyli tam imie nazwisko adres itd. i wtedy tworzysz "dynamicznie" warunki WHERE.
Drugie wyjście jest dużo lepsze, bo uniwersalne, a wszystko co uniwersalne jest lepsze.

Kopiuj
TABLA u_user
+---------+----------+----------+-----+
| user_id | name     | surname  | age |
+---------+----------+----------+-----+
|       1 | Jan      | Kowalski |  35 |
|       2 | Barbara  | Kowalska |  26 |
|       3 | Marian   | Kowalski |  69 |
|       4 | Jan      | Prosty   |  41 |
|       5 | Monika   | Janowska |  56 |
|       6 | Andrzej  | Prosty   |  33 |
|       7 | Jacek    | Prosty   |  45 |
|       8 | Mariana  | Morelowa |  32 |
|       9 | Eustachy | Morenga  |  92 |
|      10 | Marek    | Placek   |  11 |
|      11 | Anna     | Prosta   |  14 |
|      12 | Paula    | Guzik    |  25 |
+---------+----------+----------+-----+
Kopiuj
<?php
	ini_set('display_startup_errors',1);
	ini_set('display_errors',1);
	error_reporting(-1);
	
	// pod zmienne $host $dbname $user $pass wpisujesz odpowiednie dane
	$host = "localhost"; 
	$dbname = "";
	$user = "root";
	$pass = "";
	$tableName = "u_user";
	$search_value = "%Jan%";

	// Łączysz się z bazą
	$pdo = new PDO("mysql:host=".$host.";dbname=".$dbname, $user, $pass,
    	array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
   	);

	// przygotowujesz zapytanie, które wyciąga nazwy kolumn
   	$getColumnsStmt = $pdo->prepare(
                "SELECT `COLUMN_NAME` 
				 FROM `INFORMATION_SCHEMA`.`COLUMNS` 
				 WHERE `TABLE_SCHEMA`= :db_name
				 AND `TABLE_NAME`= :table_name"
            );
    $getColumnsStmt->execute(array( // bindujesz parametry ochrona przed SQL Injection
    	':db_name'    => $dbname,
		':table_name' => $tableName)); 
    $columnNames = $getColumnsStmt->fetchAll(PDO::FETCH_COLUMN, 0); // argument zeby nie dostac tablicy wielowymiarowej
	
	var_dump($columnNames);
	/*
		array (size=4)
	  0 => string 'user_id' (length=7)
	  1 => string 'name' (length=4)
	  2 => string 'surname' (length=7)
	  3 => string 'age' (length=3)
  	*/

    $sql = "SELECT * FROM $tableName WHERE ";
    // $columnNames to tablica array(nazwakolumny, nazwakolumny, nazwakolumny);
    // implode sklei nam to rozdzielajac tym samym warunkiem LIKE
    $sql .= implode(" LIKE :search_value OR ", $columnNames) . " LIKE :search_value";
    
    var_dump($sql);
    /* 
    string 'SELECT * FROM u_user 
    		WHERE 
    			user_id LIKE :search_value 
    			OR name LIKE :search_value 
    			OR surname LIKE :search_value 
    			OR age LIKE :search_value' (length=136)
	*/

    $searchStmt = $pdo->prepare($sql);
    $searchStmt->execute(array(':search_value' => $search_value)); // bindujemy search_value
    $searchResult = $searchStmt->fetchAll(PDO::FETCH_ASSOC);

    echo "Znaleziono:";
    var_dump($searchResult);
    /*
    Znaleziono:
array (size=3)
  0 => 
    array (size=4)
      'user_id' => string '1' (length=1)
      'name' => string 'Jan' (length=3)
      'surname' => string 'Kowalski' (length=8)
      'age' => string '35' (length=2)
  1 => 
    array (size=4)
      'user_id' => string '4' (length=1)
      'name' => string 'Jan' (length=3)
      'surname' => string 'Prosty' (length=6)
      'age' => string '41' (length=2)
  2 => 
    array (size=4)
      'user_id' => string '5' (length=1)
      'name' => string 'Monika' (length=6)
      'surname' => string 'Janowska' (length=8)
      'age' => string '56' (length=2)
  	*/

Coś takiego powinno zadziałać. Przed chwilą przetetowałem, więc możesz to odpalić i masz wszystko gotowe. Mam nadzieję, że przeanalizuejsz ten kod i coś się nauczysz.

edytowany 10x, ostatnio: Desu
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

No dzięki. Ale nie zadziałałoby połączenie się z bazą i kod

Kopiuj
$result = mysql_query("
SELECT id, username 
FROM tabela 
WHERE username='$username'");

$row = mysql_fetch_row($result);

$id = $row[0];
echo "Twoje ID to: ".$id

Nie wiem, czy to powinno dokładnie tak wyglądać, bo dopiero zaczynam się uczyć. Działałoby ew. z małą poprawką? Chodziło o to, żeby przeszukać tabelę, a tu konkretnie, żeby dowiedzieć się jakie jest id użytkownika o nazwie $username.

edytowany 1x, ostatnio: Adamek161
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
0

@Adamek161 Zadziałało by, tylko od samego początku chciałeś przeszukać calusieńką tabele, a nie jedną kolumnę. Dałem Ci wędkę, ale nic już więcej nie mogę zrobić, bo nie będę Cie prowadził za rączkę. Powiem Ci tylko dwie rzeczy na zakończenie 1) Nie używaj mysql tylko PDO (to co ja w swoim kodzie) i nie rób zapytań takich jak tutaj bo jak za $username ktoś Ci wpisze string "; DELETE FROM tabela" to Ci wypieprzy cała tabelę, albo jak będzie chciał to i całą bazę.

edytowany 1x, ostatnio: Desu
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

To jak mam zrobić, żeby mi nikt niczego nie zepsuł?

Tumeg
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:687
0

Poczytać na temat PDO, a w szczególności na temat bindowania parametrów zapytania.
http://php.net/manual/en/book.pdo.php
http://code.tutsplus.com/tutorials/php-database-access-are-you-doing-it-correctly--net-25338

A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

A czym różni się PDO? Co to za różnica? A w username można przefiltrować, żeby usunęło takie niebezpieczne wyrazy.

A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

Nie rozumiem do czego są te strzałki "->" może mi ktoś podpowiedzieć? I dlaczego w drugim linku o PDO od kolegi Tumeg w zapytaniu query zamiast po prostu $name jest . $conn->quote($name)? Jeśli jest to tam napisane, to przepraszam, ale niebardzo doczytuję się po angielsku. I jeszcze co to są te atrybuty, w tym przypadku ERRMODE. Co one robią?

edytowany 2x, ostatnio: Adamek161
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:1788
0

Nie, nie można przefiltrować. Poza tym to dodatkowa niepotrzebna operacja o której możesz zapomnieć. Strzałki to odwołanie to metody/właściwości obiektu. I w tym miejscu ja juz sie poddaje. Włącz tutorial i ogarnij podstawy, co to obiekt, tablica, jakie mamy zmienne, podstawowe funkcje do operacji na stringach/tablicach itd. A jak nie rozumiesz materiałów po ang to tłumacz i jazda. Zabim zaczniesz biegać musisz nauczyć sie chodzić. Happy Coding.

A1
Wiem co to obiekt, tablica, znam zmienne. Tylko że o to co tutaj pytam, to właśnie to czego nie ma w tych poradnikach i dlatego tutaj piszę, bo porozmawiać z kimś kto się na tym zna to najlepsza opcja.
A1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:171
0

A w PDO jest coś takiego jak

Kopiuj
mysql_fetch_row()

w php? Czy właśnie o to chodzi, żeby dla bezpieczeństwa nie używać fetch? A jak nie ma czegoś takiego, albo żeby tak nie robić, to jest jakiś odpowiednik? Chodzi o to żeby dostać tablice i np. $row[0] to kolumna 1, $row[1] to kolumna 2 itd. a w tych kolumnach wartości po kolei? Dzięki

edytowany 1x, ostatnio: Adamek161
Tumeg
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:687
0

Tutaj o to się rozbija żeby przed zapuszczeniem zapytania zrobić:
http://php.net/manual/en/pdostatement.bindparam.php
Co do fetcha:
http://php.net/manual/en/pdostatement.fetchall.php

Znalazłem u siebie jeszcze ten tutek, dokładniej masz wytłumaczone:
http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)