kijken of ID in DB bestaat
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 :)
Code (php)
1
2
3
4
5
6
7
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));
}
?>
$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));
}
?>
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.
Frank schreef op 17.11.2006 20:28:
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.
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.
@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!
ik had dit:
Code (php)
1
2
3
4
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;}?>
$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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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
}
?>
$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
}
?>
Code (php)
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
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;
}
?>
$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 -
is ctype_digit hetzelfde als is_numeric?
nicky schreef op 17.11.2006 20:44:
@frank
is ctype_digit hetzelfde als is_numeric?
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.
Frank en als id 29 niet in de db staat dan zal je het toch met 2 query's moeten doen...
1 query is dus genoeg!
(getest en goedgekeurd)