kijken of ID in DB bestaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicky van boven

nicky van boven

17/11/2006 20:16:00
Quote Anchor link
hoi allemaal

ik voer een query uit enzo in mysql. maar hoe kun je nou controleren of de query ook resultaat wordt geleverd.
bijv ik voer in dat ie bij ID 29 moet kijken wat er staat. Maar wat als ID 29 niet bestaat? dan weergeeft ie niets :S

hoe kan je dit controleren

grtz :)
 
PHP hulp

PHP hulp

19/11/2024 00:29:02
 
Eris -

Eris -

17/11/2006 20:22:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= 'SELECT * FROM tabel WHERE id = 29';
$result = mysql_query($sql) or trigger_error(mysql_error());
if(mysql_num_rows($result) > 0){
print_r(mysql_fetch_assoc($sql));
}

?>
 
Frank -

Frank -

17/11/2006 20:28:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  COUNT(1) AS aantal
FROM
  tabelnaam
WHERE
  id = 29

Deze query levert jou het exacte aantal records op dat aan deze voorwaarde voldoet. Dat zal waarschijnlijk 0 of 1 zijn. Deze query is sneller dan de query van Eris, het is een slimmere vraag: Hoeveel records voldoen aan de eis dat het id gelijk is aan 29.

Ik hoop wel dat je verder geen enkele betekenis aan het getal 29 toekent, met een id herken je uitsluitend een uniek nummer. Zet hier gewoon een auto_increment op en jij hoeft je helemaal nergens zorgen over te maken. Hopelijk roep ik hier dingen die jij ook al weet, dat scheelt een hoop problemen.
 
Robert Deiman

Robert Deiman

17/11/2006 20:31:00
Quote Anchor link
Frank schreef op 17.11.2006 20:28:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  COUNT(1) AS aantal
FROM
  tabelnaam
WHERE
  id = 29

Deze query levert jou het exacte aantal records op dat aan deze voorwaarde voldoet. Dat zal waarschijnlijk 0 of 1 zijn. Deze query is sneller dan de query van Eris, het is een slimmere vraag: Hoeveel records voldoen aan de eis dat het id gelijk is aan 29.

Ik hoop wel dat je verder geen enkele betekenis aan het getal 29 toekent, met een id herken je uitsluitend een uniek nummer. Zet hier gewoon een auto_increment op en jij hoeft je helemaal nergens zorgen over te maken. Hopelijk roep ik hier dingen die jij ook al weet, dat scheelt een hoop problemen.


Het gaat er denk ik om dat er ook gegevens moeten worden gevonden met het record, dus dat je bijvoorbeeld de naam weer wilt geven van de gebruiker met id=29
Dan is de oplossing van Eris toch echt beter, binnen de if heb je dan de data die weergegeven wordt, en in de else de melding voor als er geen records zijn gevonden.
 
Frank -

Frank -

17/11/2006 20:33:00
Quote Anchor link
@Robert: je kon wel eens gelijk hebben, ik krijg het idee dat ik niet helemaal goed heb gelezen. Gelukkig is de TS in elk geval geholpen!
 
Nicky van boven

nicky van boven

17/11/2006 20:33:00
Quote Anchor link
hoe maak je dat ie ipv id 29 die niet bestaat id 23 uit de database pakt als standaard ?

ik had dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$sql
="SELECT * FROM database WHERE id = '".mysql_real_escape_string(addslashes($_GET['id']))."'";
$res = mysql_query($sql);
if($res){$rij = mysql_fetch_assoc($res);}else{$rij = 23;}if(mysql_num_rows($res) < 0){$rij = 23;}?>


maar als ik bij $_GET['id'] 329408 invoer dan krijg ik een lege query. Hij moet bijv een titel op mn webpagina weergeven maar daar staat dan helemaal niets $rij['titlel'] gebruik ik hiervoor
 
Robert Deiman

Robert Deiman

17/11/2006 20:35:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql
="SELECT * FROM database WHERE id = '".mysql_real_escape_string(addslashes($_GET['id']))."'";
$res = mysql_query($sql);
if($res){
   $rij = mysql_fetch_assoc($res);
   }


else{
$sql= "SELECT * FROM database WHERE id =23";
//verdere uitvoer van de query
}
?>
 
Frank -

Frank -

17/11/2006 20:39:00
Quote Anchor link
Deze is eenvoudiger, je hebt slechts 1 query nodig en 1 goede controle op de input:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$default
= 1;
if(isset($_GET['id']) && ctype_digit($_GET['id'])){
    $id = $_GET['id'];
}

else {
    $id = $default;
}

$sql ="
SELECT
  *
FROM
  tabelnaam
WHERE
  id =
    CASE
      WHEN id = '"
.$id."' THEN '".$id."'
      ELSE '"
.$default."'
    END
"
;
$res = mysql_query($sql);
if($res){
    $rij = mysql_fetch_assoc($res);
}

else {
    echo 'Query mislukt vanwege de volgende fout: '.mysql_error().$sql;
}

?>

Edit: CASE in de query gezet met een fraaie default waarde in het geval de opgegeven GET niet bestaat.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Nicky van boven

nicky van boven

17/11/2006 20:44:00
Quote Anchor link
@frank
is ctype_digit hetzelfde als is_numeric?
 
Frank -

Frank -

17/11/2006 20:51:00
Quote Anchor link
nicky schreef op 17.11.2006 20:44:
@frank
is ctype_digit hetzelfde als is_numeric?

Nee, zie de verschillende resultaten:
1) De integer 23 levert een FALSE op met ctype_digit en een TRUE met is_nummeric.
2) De string 23 levert in beide gevallen een TRUE op
3) De integer 23.1 levert een FALSE op met ctype_digit en een TRUE met is_nummeric.
4) De string 23.1 levert een FALSE op met ctype_digit en een TRUE met is_nummeric.

Kortom, er zitten flinke verschillen in. Wanneer je de gegevens met $_GET ophaalt, worden deze als een string aangeleverd. ctype_digit() voldoet dan uitstekend.
 
Eris -

Eris -

17/11/2006 20:55:00
Quote Anchor link
Frank en als id 29 niet in de db staat dan zal je het toch met 2 query's moeten doen...
 
Frank -

Frank -

17/11/2006 21:11:00
Quote Anchor link
Laat de database het lekker zelf uitzoeken! Ik bespeur een CASE:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
  *
FROM
  tabelnaam
WHERE
  id = CASE
    WHEN id = 29 THEN 29
    ELSE 1
  END

1 query is dus genoeg!

(getest en goedgekeurd)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.