mysql_num_rows()
als ik dit stukje gebruik krijg ik deze error melding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/httpd/vhosts/battle-hq.com/subdomains/leagues/httpdocs/graw/functions/register.php on line 66
Code (php)
1
2
3
4
2
3
4
<?php
if (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = " . $_POST['email'] . "")) > 0){
echo "<font class='menutext'>Your e-mail addres is already in use on an different account.</font>";
}?>
if (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = " . $_POST['email'] . "")) > 0){
echo "<font class='menutext'>Your e-mail addres is already in use on an different account.</font>";
}?>
Weet iemand meschien waar dit aan ligt?
Gewijzigd op 01/01/1970 01:00:00 door Robin Peters
$sql = "je query";
$res = mysql_query($sql);
$num = mysql_num_rows($res);
Succes
Juiste aanpak:
1) De query zet je in een variabele
2) Met de functie mysql_query() ga je de query uitvoeren
3) Controleer of de query correct is uitgevoerd. Zo niet, geef een foutmelding en echo de query. Dat kan nu omdat deze in een variabele staat.
4) Ga iets met de resultaten doen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = "SELECT blablabla....";
$result = mysql_query($query);
if(!$result){
echo 'Mislukt: '.mysql_error().' met query: '.$query;
}
else {
$aantal = mysql_num_rows($result);
// doe iets met $aantal
}
?>
$query = "SELECT blablabla....";
$result = mysql_query($query);
if(!$result){
echo 'Mislukt: '.mysql_error().' met query: '.$query;
}
else {
$aantal = mysql_num_rows($result);
// doe iets met $aantal
}
?>
Erik:
je mag mysql_num_rows() niet op deze manier gebruiken
$sql = "je query";
$res = mysql_query($sql);
$num = mysql_num_rows($res);
Succes
$sql = "je query";
$res = mysql_query($sql);
$num = mysql_num_rows($res);
Succes
Je mag het zo wel gebruiken maar over het verstandig is een ander verhaal
Je query klopt niet.
Zo zou hij moeten werken.
"SELECT email FROM users WHERE email = '" . $_POST['email'] . "'"
Verder tip van Frank/Erik even opvolgen. Verder klopt het ook wat Eris zegt, en niet helemaal wat Erik zegt :)
Doordat dit veld nu uniek is, kun je zonder meer de data in de database gaan wegschrijven. Dus de INSERT. Het gaat vanzelf fout wanneer er een emailadres voor de 2e keer in de database wordt geschreven, althans wanneer je dat probeert. Je krijgt van mysql keurig een foutmelding terug (gebruik mysql_errno()) en vang dit nummer op om de juiste melding op het scherm te tonen.
Deze aanpak zal sneller zijn. 9 van de 10 keer wordt er een nieuw emailadres weggeschreven. En die ene keer dat het fout gaat, krijg je direct een foutmelding terug. In alle gevallen heb je slechts 1 query nodig, de INSERT, en niet 2 zoals je nu hebt. Eerst een SELECT en dan een INSERT.
Ga er eens mee stoeien en leer zo ook iets over data integriteit. Geen enkele databasebeheerder zal ooit code van een programmeur vertrouwen, die zal altijd vertrouwen op zaken als UNIQUE.
Frank:
Betere oplossing: Maak het veld 'email' uniek. Dan kan er nooit en te nimmer een dubbel emailadres in de database worden ingevoerd.
Doordat dit veld nu uniek is, kun je zonder meer de data in de database gaan wegschrijven. Dus de INSERT. Het gaat vanzelf fout wanneer er een emailadres voor de 2e keer in de database wordt geschreven, althans wanneer je dat probeert. Je krijgt van mysql keurig een foutmelding terug (gebruik mysql_errno()) en vang dit nummer op om de juiste melding op het scherm te tonen.
Deze aanpak zal sneller zijn. 9 van de 10 keer wordt er een nieuw emailadres weggeschreven. En die ene keer dat het fout gaat, krijg je direct een foutmelding terug. In alle gevallen heb je slechts 1 query nodig, de INSERT, en niet 2 zoals je nu hebt. Eerst een SELECT en dan een INSERT.
Ga er eens mee stoeien en leer zo ook iets over data integriteit. Geen enkele databasebeheerder zal ooit code van een programmeur vertrouwen, die zal altijd vertrouwen op zaken als UNIQUE.
Doordat dit veld nu uniek is, kun je zonder meer de data in de database gaan wegschrijven. Dus de INSERT. Het gaat vanzelf fout wanneer er een emailadres voor de 2e keer in de database wordt geschreven, althans wanneer je dat probeert. Je krijgt van mysql keurig een foutmelding terug (gebruik mysql_errno()) en vang dit nummer op om de juiste melding op het scherm te tonen.
Deze aanpak zal sneller zijn. 9 van de 10 keer wordt er een nieuw emailadres weggeschreven. En die ene keer dat het fout gaat, krijg je direct een foutmelding terug. In alle gevallen heb je slechts 1 query nodig, de INSERT, en niet 2 zoals je nu hebt. Eerst een SELECT en dan een INSERT.
Ga er eens mee stoeien en leer zo ook iets over data integriteit. Geen enkele databasebeheerder zal ooit code van een programmeur vertrouwen, die zal altijd vertrouwen op zaken als UNIQUE.
Ok ik ben er eens mee aan de gang gegaan en heb de velden UNIQUE gemaakt ook heb ik error_reporting(E_ALL); aangezet.
Nou word er inderdaad geen waarde in de db gezet als er al iets in staat, maar ik krijg geen error te zien.
eenig idee?
wel de $query aanpassen aan de naam van jouw query natuurlijk.