[SOLVED] Query returned false?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart Willemsen

Bart Willemsen

05/09/2011 20:55:25
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }


En aangezien ik zelf een MySQL class heb geschreven, ook nog de code uit de method Query :P

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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;
            }
        }
    }


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
 
PHP hulp

PHP hulp

22/09/2021 10:38:24
 
Noppes Homeland

Noppes Homeland

05/09/2011 21:10:24
Quote Anchor link
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
 
Bart Willemsen

Bart Willemsen

05/09/2011 21:35:29
Quote Anchor link
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
Gewijzigd op 05/09/2011 21:36:27 door Bart Willemsen
 
Aad B

Aad B

05/09/2011 21:59:35
Quote Anchor link
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
 
Bart Willemsen

Bart Willemsen

05/09/2011 22:20:38
Quote Anchor link
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..
 
Aad B

Aad B

05/09/2011 22:25:22
Quote Anchor link
Excuses niet nodig hoor, niemand voelt zich aangevallen. Haal alle backticks en @ weg en zet foutmeldingen aan zolang je aan het testen ben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>

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
 
Bart Willemsen

Bart Willemsen

05/09/2011 22:37:44
Quote Anchor link
Ik krijg deze errors terug:

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


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
 
- SanThe -

- SanThe -

05/09/2011 22:43:35
Quote Anchor link
Maak eens van mysql_insert_id() dit: mysql_insert_id($this->mysql_link)
 
Bart Willemsen

Bart Willemsen

05/09/2011 23:08:10
Quote Anchor 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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.