Sprawdzanie czy dane ciągi istnieją w bazie


(Patrol) #1

Witam!

Mam taki problem. Mam skrypt:

<?php

if(isset($_POST['submit']))

{

	$explode=explode("\n",$_POST['codes']);

	$code=count($explode);

	$numbers=0;

	for($i=0;$i<$code;$i++) 

		{

			$query=mysql_query("SELECT * FROM `kody` WHERE `kod`='$explode[$i]' AND `stan`='0'") or die(mysql_error());

			if(mysql_num_rows($query)>0)

			{

				echo 'Kod poprawny
';

				$numbers=$numbers+1;


			}


			else

			{

				echo '
';

			}

		}

	echo "$numbers";

}

?>

| Kody: | |
| | |

[/code]

Niestety pokazuje że praktycznie wszystkie kody są niepoprawne, nie wywala błędów, połączenie z bazą istnieje. Proszę o pomoc.


(Marek Ciarkowski) #2

To chyba niema prawa działać. Zapytanie do bazy zwraca wyniki w postaci tablicy. Jak masz przeszukać tą tablice skoro zapętlasz zapytanie :slight_smile: $query powinno być poza pętlą.


(Patrol) #3

Ja nie mam jej przeszukiwać, ja mam zwrócić ile było rekordów. Pozatym to nie sprawdza jednego kodu tylko kilka tysięcy więc musi być w pętli.


(Airborn) #4

patryk_patrol , Ty chcesz zliczyć liczbę rekordów spośród kilku tysięcy takimi zapytaniami?! to chyba jakiś żart?! a gdzie jakakolwiek wydajność aplikacji?!

ale co do samego zapytania...

`stan`='0'

co to za kolumna?


(Patrol) #5

Kilkatysięcy w kilku razach (np. w 20).


(Patrol) #6
$query=mysql_query("SELECT * FROM kody WHERE kod='$explode[$i]' AND stan=0");

Tak powinno być poprawnie? Kolega mnie błędnie tamtym nakierowywał :).


(Airborn) #7

nie wiem jak po winno być 'poprawnie', bo ciągle nie napisałeś co to za kolumna... niemniej tego typu nigdy nie będzie 'popranym' może być co najwyżej 'zwracającym prawidłowy wynik'. 'poprawnym' nie będzie, bo nie masz raczej większego pojęcia o SQL i nie potrafisz napisać jednego prostego wydajnego zapytania zamiast kilkudziesieciu wolnych...


(Patrol) #8

Kolumna ta zwraca wynik czy kod został aktywowany czy nie. 1 = został aktywowany, 0 = nie.


(Airborn) #9

czyli typ int, tak? w takim razie poprawiłeś zapytanie na takie które powinno dawać założony wynik, ale tym samym kolejny raz udowodniłeś, że nie masz większego pojęcia o podstawach i typach danych jakie występują w SQL (dlaczego nie używasz do tego bool?)


(Patrol) #10

Następnym razem bede wiedział ...