2011-01-27 27 views
5

mam zmienną PHP: $fooSprawdź, czy wartość istnieje w MySQL rzędu

Moja tabela MySQL nazywa data ma następującą strukturę:

id var header 

1  zj3  http://google.com 

Chciałbym sprawdzić czy $foo wszystko jest gotowe w var rząd.

Jeśli to chciałbym echo header ("http://google.com")

Jak można podejść do tego?

Z góry dziękuję, proszę o wyjaśnienie!

+0

A więc chcesz zwrócić wiersz, jeśli wartość NIE jest w tabeli? Jestem zmieszany. –

+0

@Rocket Przepraszamy za OGROMNĄ literówkę !! Zmieniono moje pytanie. – Trufa

+0

dzięki. Teraz ma to sens :-P –

Odpowiedz

9

Zapytanie powinno być:

SELECT `header` FROM `data` WHERE `var` = '$foo' 

ta zwróci wszystkie nagłówki o wartości var z $foo.

$db = mysqli_connect('localhost', 'username', 'password', 'database'); 
if($query = mysqli_query($db, "SELECT `header` FROM `data` WHERE `var` = '$foo'")){ 
    while($row = mysqli_fetch_assoc($query)){ 
    echo $row['header']; 
    } 
    mysqli_free_result($query); 
} 
+0

Więc jeśli porównać go do pustego, będę wiedzieć, czy wartość istnieje? co powróci, jeśli nie znajdzie żadnej wartości? – Trufa

+0

Jeśli nic nie znajdzie, to nic nie zwróci ("$ query" będzie miało wartość "FALSE"). –

+0

@Trufa: Co masz na myśli mówiąc: "Więc jeśli porównuję to do pustego, będę wiedział, czy wartość istnieje"? –

1

najpierw połączyć się z db

$query = mysql_query("SELECT var, header FROM data WHERE id='1'") or die(mysql_error()); 
while($row = mysql_fetch_assoc($query)){ 
    if($foo == $row['var']){ 
     echo $row['header']; 
    } 
} 

EDIT: Zmieniono stwierdzenie równości oparty na edycję

+0

To ma sens, wypróbuję to, dziękuję za szybką reakcję! – Trufa

+0

Mówi: "Nie wybrano żadnej bazy danych" dlaczego tak się stało? – Trufa

+0

@ Trufa: Musisz najpierw upewnić się, że łączysz się z bazą danych za pomocą 'mysql_connect'. –

1

pytasz czy $foo meczów dowolny pól w data, czy $foo=some_field? Tutaj, jeśli chcesz $foo==var.

$foo='somevalue'; 
$query="SELECT id, var, header FROM `data` WHERE var='$foo'"; 
$result=mysqli_query($query); 
if($result->num_rows==0) 
    $loc= 'http://google.com';//default value for when there is no row that matches $foo 
}else{ 
    $row=$result->fetch_assoc(); //more than one row is useless since the first header('Location: x') command sends the browser to a new page and away from your script. 
    $loc=$row['header']; 

} 
header ("Location: $loc); 
exit; 

ETA: od czasu edycji pytania wydaje się, że chcesz wyświetlić nagłówek kolumny, jeśli wartość wyszukiwania pasuje do Twojej kolumny var. Powyższe nie zadziała w tym zakresie.

+0

Tak, to prawda, chcę echo kolumny nagłówka, jeśli wartość wyszukiwania pasuje do kolumny var. – Trufa

0

Chcesz się tylko dowiedzieć, czy wartość $ var jest w dowolnym miejscu w tej kolumnie (dowolny wiersz (y))?

SELECT COUNT(id) FROM data WHERE var = ?; 

Wynik będzie liczbą wierszy, dla których pole var zawiera wartość $ var.

1

To wcale nie jest trudne, jeśli dobrze rozumiem, to powinno ci pomóc.

// Query Variable/Contains you database query information 
$results = $query; 

// Loop through like so if the results are returned as an array 
foreach($results as $result) 
{ 
    if(!$result['var']) 
     echo $result['header']; 
} 

// Loop through like so if the results are returned as an object 
foreach($results as $result) 
{ 
    if(!$result->var) 
     echo $result->header; 
} 
0

Oto szablon dla wszystkich pytań "istnieje".

To jedyna rzecz, która do tej pory zadziałała dla mnie i nie jest przestarzała.

if ($query = mysqli_query($link, "SELECT header FROM data WHERE var = '$foo'")) { 

     $header = mysqli_fetch_assoc($query); 

     if ($header) { 

      // The variable with value $foo exists. 
     } 
     else { 

      // The variable with value $foo doesn't exist. 
     } 
    } 
    else { 

     // The query didn't execute for some reason. (Dammit Obama!) 
    } 

OSTRZEŻENIE!

Nawet jeśli zmienna NIE ISTNIEJE Porównanie $ query i mysqli_query() zawsze zwróci TRUE.

Jedynym sposobem - co mi się przydarzyło - do porównania w celu zwrotu FALSE jest błąd składniowy w zapytaniu.

Nie wiem, dlaczego to zadziałało dla faceta, który napisał akceptowaną odpowiedź, może jest to aktualizacja, a może miał błąd składni i był tak pewien, że nie sprawdził, czy kiedykolwiek może być PRAWDA .

Oto ktoś komentarz dokonane w celu skorygowania jego składnię:

„Dodaj kolejny) przed {w pierwszej linii”

Tak, przyjęte rozwiązanie jest błędne!

Powiązane problemy