[SOLVED] Query returned false?
Hallo,
Ik heb een klein probleempje met mijn script en weet niet waar het aan ligt..
Ik voer namelijk een INSERT query uit en opzich gaat dat goed. De data komt in de database maar om een 1 of andere reden returnt hij toch false. Hier is de code met de query:
En aangezien ik zelf een MySQL class heb geschreven, ook nog de code uit de method Query :P
Ik denk zelf dat het ergens in de function fout gaat, maar de query voert dus wel goed uit... weet iemand waar het aan kan liggen?
Alvast bedankt!
~ Bart
Ik heb een klein probleempje met mijn script en weet niet waar het aan ligt..
Ik voer namelijk een INSERT query uit en opzich gaat dat goed. De data komt in de database maar om een 1 of andere reden returnt hij toch false. Hier is de code met de query:
Code (php)
1
2
3
4
2
3
4
if (! isset($error)) {
$insert_q = "INSERT INTO `GUESTBOOK_entries` (name, email, website, message, date, ip) VALUES ('".addslashes($name)."','".addslashes($email)."','".addslashes($website)."','".addslashes($message)."',NOW(),'".$_SERVER['REMOTE_ADDR']."')";
$postentry = $db->Query($insert_q);
}
$insert_q = "INSERT INTO `GUESTBOOK_entries` (name, email, website, message, date, ip) VALUES ('".addslashes($name)."','".addslashes($email)."','".addslashes($website)."','".addslashes($message)."',NOW(),'".$_SERVER['REMOTE_ADDR']."')";
$postentry = $db->Query($insert_q);
}
En aangezien ik zelf een MySQL class heb geschreven, ook nog de code uit de method Query :P
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
29
30
31
32
33
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
29
30
31
32
33
public function Query($sql) {
$this->ResetError();
$this->last_sql = $sql;
$this->last_result = @mysql_query($sql, $this->mysql_link);
if(! $this->last_result) {
$this->active_row = -1;
$this->SetError();
return false;
} else {
if (strpos(strtolower($sql), "insert") === 0) {
$this->last_insert_id = mysql_insert_id();
if ($this->last_insert_id === false) {
$this->SetError();
return false;
} else {
$numrows = 0;
$this->active_row = -1;
return $this->last_result;
}
} else if(strpos(strtolower($sql), "select") === 0) {
$numrows = mysql_num_rows($this->last_result);
if ($numrows > 0) {
$this->active_row = 0;
} else {
$this->active_row = -1;
}
$this->last_insert_id = 0;
return $this->last_result;
} else {
return $this->last_result;
}
}
}
$this->ResetError();
$this->last_sql = $sql;
$this->last_result = @mysql_query($sql, $this->mysql_link);
if(! $this->last_result) {
$this->active_row = -1;
$this->SetError();
return false;
} else {
if (strpos(strtolower($sql), "insert") === 0) {
$this->last_insert_id = mysql_insert_id();
if ($this->last_insert_id === false) {
$this->SetError();
return false;
} else {
$numrows = 0;
$this->active_row = -1;
return $this->last_result;
}
} else if(strpos(strtolower($sql), "select") === 0) {
$numrows = mysql_num_rows($this->last_result);
if ($numrows > 0) {
$this->active_row = 0;
} else {
$this->active_row = -1;
}
$this->last_insert_id = 0;
return $this->last_result;
} else {
return $this->last_result;
}
}
}
Ik denk zelf dat het ergens in de function fout gaat, maar de query voert dus wel goed uit... weet iemand waar het aan kan liggen?
Alvast bedankt!
~ Bart
Gewijzigd op 05/09/2011 23:08:28 door Bart Willemsen
1. backticks horen niet thuis in sql
2. het is ook niet handig om hoofdletters en kleine letters doorelkaar te gebruiken bij het benoemen van database/tabel/veldnamen
3. onderdruk geen fout, dus haal die @ uit je code
4. niet goed is bij jou niet fout, m.a.w. schrijf nette duidelijk foutafhandeling
5. addslashes, het moet niet gekker worden, je dient op die plek _real_escape_string te gebruiken
6. zet geduren het testen van je code de debug modus aan, zodat je de pijn punten van je code te zien krijgt
2. het is ook niet handig om hoofdletters en kleine letters doorelkaar te gebruiken bij het benoemen van database/tabel/veldnamen
3. onderdruk geen fout, dus haal die @ uit je code
4. niet goed is bij jou niet fout, m.a.w. schrijf nette duidelijk foutafhandeling
5. addslashes, het moet niet gekker worden, je dient op die plek _real_escape_string te gebruiken
6. zet geduren het testen van je code de debug modus aan, zodat je de pijn punten van je code te zien krijgt
1. Ik hoorde juist dat je die wel moest gebruiken om eventuele reserved keywords te omzeilen?
2. Misschien heb je daar gelijk in, maar ik gebruikte het vooral voor mijzelf zodat ik bijvoorbeeld snel kan zien bij welk component de tabel hoort.
3. Ik handel de fouten af op mijn eigen manier. Ik heb de $db->SetError() voor het opvangen van fouten, en kan ze (desnoods afgeschermd voor normaal publiek) zien met $db->Error(). Echter geeft hij in dit geval geen MySQL error terug...
4. Waar in de code zie je dat?
5. Weet ik, alleen op een een of andere reden doet mysql_real_escape_string() het niet op mijn host.. :/
6. Dat kan ik nog wel eens proberen.. Heb tot nu toe alleen een var_dump voor $postentry die me informatie geeft.. :P
2. Misschien heb je daar gelijk in, maar ik gebruikte het vooral voor mijzelf zodat ik bijvoorbeeld snel kan zien bij welk component de tabel hoort.
3. Ik handel de fouten af op mijn eigen manier. Ik heb de $db->SetError() voor het opvangen van fouten, en kan ze (desnoods afgeschermd voor normaal publiek) zien met $db->Error(). Echter geeft hij in dit geval geen MySQL error terug...
4. Waar in de code zie je dat?
5. Weet ik, alleen op een een of andere reden doet mysql_real_escape_string() het niet op mijn host.. :/
6. Dat kan ik nog wel eens proberen.. Heb tot nu toe alleen een var_dump voor $postentry die me informatie geeft.. :P
Gewijzigd op 05/09/2011 21:36:27 door Bart Willemsen
Reserved words gebruiken in tabel of attribuutnamen is onverstandig. Om dat daarna dan weer te omzeilen met backticks of quotes is onhandig. Kortom doe niet! Upper en lower case door elkaar is ook niet handig in bijv GUESTBOOK_entries, niet doen! Wil je graag de tabelnaam erbij zien prefix dan gewoon: guestbook.entries ipv GUESTBOOK_entries. Onderduk nooit fouten met @ en een verdediging van "Ik handel de fouten af op mijn eigen manier" is een illusie, @ gebruiken onderdukt foutmeldingen dus die kan je ook niet op je eigen manier afhandelen. Neem gewoon even aan wat Noppes zegt ipv alles te verdedigen!!
Gewijzigd op 05/09/2011 22:00:38 door Aad B
Ok, ik begrijp het. Het is misschien een beetje onhandig inderdaad.. maar zo heb ik het aangeleerd helaas.. :/
Ik heb de backticks verwijdered uit de query en zal dat ook bij de rest doen (voor zover ik weet gebruik ik inderdaad toch geen reserved keywords). De uppercase wordt wat moeilijker om direct aan te passen aangezien ik dan meteen mijn hele database moet omgooien..
Mijn excuses. Ik wou niemand aanvallen of zo, en ik sta open voor alle advies, begrijp dat niet verkeerd. Ik zie en lees alleen zo veel verschillende manieren dat het moeilijk is om daar de beste manier uit te halen..
Ik heb de backticks verwijdered uit de query en zal dat ook bij de rest doen (voor zover ik weet gebruik ik inderdaad toch geen reserved keywords). De uppercase wordt wat moeilijker om direct aan te passen aangezien ik dan meteen mijn hele database moet omgooien..
Mijn excuses. Ik wou niemand aanvallen of zo, en ik sta open voor alle advies, begrijp dat niet verkeerd. Ik zie en lees alleen zo veel verschillende manieren dat het moeilijk is om daar de beste manier uit te halen..
Excuses niet nodig hoor, niemand voelt zich aangevallen. Haal alle backticks en @ weg en zet foutmeldingen aan zolang je aan het testen ben:
Ongetwijfeld zie je dan sneller wat er fout gaat. Later kan je de foutmeldingen onzichtbaar maken voor de gebruiker.
Ongetwijfeld zie je dan sneller wat er fout gaat. Later kan je de foutmeldingen onzichtbaar maken voor de gebruiker.
Gewijzigd op 05/09/2011 22:26:15 door Aad B
Ik krijg deze errors terug:
Volgens mij zijn die warnings de reden waarom mijn function "false" returned... alsof de rechten niet goed zijn of zo lijkt het..
Quote:
Deprecated: Function eregi() is deprecated in webscripts/WEBSITE_gastenboek.php on line 27
Warning: mysql_insert_id() [function.mysql-insert-id]: Access denied for user '<snip>'@'localhost' (using password: <snip>) in classes/class.mysql.php on line 176
Warning: mysql_insert_id() [function.mysql-insert-id]: A link to the server could not be established in classes/class.mysql.php on line 176
Warning: mysql_insert_id() [function.mysql-insert-id]: Access denied for user '<snip>'@'localhost' (using password: <snip>) in classes/class.mysql.php on line 176
Warning: mysql_insert_id() [function.mysql-insert-id]: A link to the server could not be established in classes/class.mysql.php on line 176
Volgens mij zijn die warnings de reden waarom mijn function "false" returned... alsof de rechten niet goed zijn of zo lijkt het..
Gewijzigd op 05/09/2011 23:00:42 door Bart Willemsen
Maak eens van mysql_insert_id() dit: mysql_insert_id($this->mysql_link)
Heb het veranderd en nu doet hij het wel! Hij geeft nu wel gewoon "true" terug, wat de bedoeling was. bedankt voor de hulp allemaal! :D




