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
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.
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.
hoe maak je dat ie ipv id 29 die niet bestaat id 23 uit de database pakt als standaard ?
ik had dit:
<?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
Deze is eenvoudiger, je hebt slechts 1 query nodig en 1 goede controle op de input:
<?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.
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.