[SOLVED] Query returned false?
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
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. 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
Gewijzigd op 05/09/2011 22:00:38 door Aad B
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..
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
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