Beste manier SQL afhandeling

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Teun Hesseling

Teun Hesseling

24/04/2012 14:15:24
Quote Anchor link
Goeiemiddag,

Ik vroeg mij af hoe je nou het beste kunt checken of je query wel gelukt is of niet gelukt is en hoe je daar dus het beste een foutafhandeling van kunt maken.

Ik doe het meestal zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$sql
= mysql_query("INSERT INTO slideshow(bla,bla)VALUES('".mysql_real_escape_string($bla)."','".mysql_real_escape_string($bla)."')");
                        if(mysql_affected_rows() > 0){
                            echo '<div class="correct">bla is succesvol!<br></div>';
                        }

                        else{
                            echo '<div class="incorrect">bla is milukt!<div>';
                        }

?>


Is dit een goeie manier/juiste manier of zou ik het eigenlijk anders moeten doen?

Groetjes
 
PHP hulp

PHP hulp

20/04/2024 10:10:00
 
- SanThe -

- SanThe -

24/04/2012 14:18:52
Quote Anchor link
Wat jij hebt heeft niks met foutafhandeling te maken.
Zie: http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/
 
Teun Hesseling

Teun Hesseling

24/04/2012 14:34:47
Quote Anchor link
dankje, ik heb die tutorial over het hoofd gezien toen ik er naar zocht, denk ik.

dus dan zou het op deze manier, wel goed zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$sql
= "INSERT INTO tabel(bla,bla)VALUES('".mysql_real_escape_string($bla)."','".mysql_real_escape_string($bla)."')";
if(($result = mysql_query($sql)) === true){
    echo '<div class="correct">Bla is succesvol!</div>';
}

else{
    echo '<div class="incorrect">Bla is milukt!</div>';
}

?>
 
Gerhard l

gerhard l

24/04/2012 15:47:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
#1110 - Column 'bla' specified twice


Joke, zo is je afhandeling inderdaad goed.
 
Teun Hesseling

Teun Hesseling

24/04/2012 16:45:47
Quote Anchor link
ja, bij die wel. maar bij mijn select qeury wil het blijkbaar niet terwijl ik de tutorial precies volg:

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
<?php
        $sql
= "SELECT foto FROM slideshow";
        $result = mysql_query($sql);
        if($result === true){
            echo '
                <table>
                    <tr>
                        <td>
                            Foto
                        </td>
                        <td>
                            Categorie
                        </td>
                    </tr>
            '
;
            While($row = mysql_fetch_assoc($result)){
                echo $row['foto'];
            }

            echo '
                    
                </tabe>
            '
;
        }

        else{
            echo 'lukt niet';
        }

?>

en als ik de if statement weg haal. dan krijg ik in de while gewoon netjes resulaat
Gewijzigd op 24/04/2012 16:47:12 door Teun Hesseling
 
Jurgen B

Jurgen B

24/04/2012 16:54:59
Quote Anchor link
Dit komt omdat $result een resource teruggeeft bij een SELECT query en dus geen boolean waardoor je vergelijking niet opgaat.

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

Zoals ook in de tutorial staat gebruik dan bijv. === false om een eventuele fout af te vangen en een 'else' om de juiste werking af te vangen.
Gewijzigd op 24/04/2012 16:56:44 door Jurgen B
 
Mebus  Hackintosh

Mebus Hackintosh

24/04/2012 17:01:59
Quote Anchor link
Ook al is een insert 'gelukt' en je ziet geen error kan het op de achtergrond nog steeds fout gaan dus kijk altijd met mysql_affected_rows of er ook echt iets is toegevoegd aan de database.
 
Teun Hesseling

Teun Hesseling

25/04/2012 11:15:59
Quote Anchor link
Dankje mebus voor het advies.

Ik probeer het nog steeds via de tutorial manier
behalve dan dat ik van false true maak.
Maar ik krijg het nog steeds niet echt werkend, hij blijft uitkomen op de else met als echo 'Fout'.
Of ik doe het echt totaal fout, en zie de fout niet, maar daarvoor zit ik natuurlijk op dit forum.

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
<?php
        $sql
= "SELECT foto FROM slideshow";
        if(($result = mysql_query($sql)) === true){
            echo '
                <table>
                    <tr>
                        <td>
                            Foto
                        </td>
                    </tr>
            '
;
            While($row = mysql_fetch_assoc($result)){
                echo '<tr><td>'.$row['foto'].'</td></tr>';
            }

            echo '
                    <tr>
                        <td>
                            <input type="button" onClick="location.href=\'beheer&edit=slideadd\'" value="Foto toevoegen">
                        </td>
                    </tr>
                </table>
            '
;
        }

        elseif (mysql_num_rows($result) == 0){
            echo 'Niet veel bijzonders.';
        }

        else{
            echo 'Fout.';
        }

?>
Gewijzigd op 25/04/2012 11:16:46 door Teun Hesseling
 
Gerhard l

gerhard l

25/04/2012 11:20:18
Quote Anchor link
Een select statement zal false teruggeven als hij mislukt en als hij slaagt geeft hij de rows weer die jij opvraagt, jij vraagt nu dus (als je query verder klopt) of je rows gelijk zijn aan true (===), dit is natuurlijk niet zo, en hij vind dus ook meer rows dan 0 en kom je bij je else uit.

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
34
35
36
37
38
39
40
41
42
43
<?php
$sql
= "SELECT foto FROM slideshow";
//als het resultaat NIET fout is
if(($result = mysql_query($sql)) !== false){

    //hij is geslaagd dus we kunnen rows tellen
    if (mysql_num_rows($result) == 0){
        echo 'Niet veel bijzonders.';
    }

    else{
        echo '
<table>
    <tr>
        <td>
            Foto
        </td>
    </tr>
        '
;
        //uitlezen
        while($row = mysql_fetch_assoc($result)){
            echo '
    <tr>
        <td>
            '
.$row['foto'].'
        </td>
    </tr>
            '
;
        }

        
        echo '
    <tr>
        <td>
            <input type="button" onClick="location.href=\'beheer&edit=slideadd\'" value="Foto toevoegen">
        </td>
    </tr>
</table>
        '
;
    }
}

else{
    echo 'Fout.';
}

?>


edit: tabs werken niet mee-.-
Gewijzigd op 25/04/2012 11:24:18 door gerhard l
 
Teun Hesseling

Teun Hesseling

25/04/2012 11:30:34
Quote Anchor link
Dankje ger, blijkbaar wertk !== false wel en === true niet. terwijl dat in mijn ogen eigenlijk het zelfde betekent. Zou iemand mij anders dan is uit kunnen leggen wat dan dus het verschil is tussen !== false (ongelijk aan false dus true) en === true?
 
Erwin H

Erwin H

25/04/2012 12:46:21
Quote Anchor link
$a === true
evalueert alleen naar true als $a de waarde true heeft. Voor al het andere evalueert het naar false.

$a !== false
evalueert alleen naar false als $a de waarde false heeft. Voor al het andere evalueert het naar true.

Dat is het verschil....

Aangezien $result alleen false kan zijn, of een resource, kan je nooit === true gebruiken. Het zal namelijk nooit true zijn. Je kan wel !== false gebruiken, want in de meeste gevallen zal het niet false zijn, maar een resource.
 
Kris Peeters

Kris Peeters

25/04/2012 13:55:35
Quote Anchor link
Misschien heb je hier nog iets aan.

De weg van de logica die gevolgd wordt.

Daarom zeg ik niet dat je dit altijd in zo'n structuur moet steken; het is meer informatief

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
<?php
$mysqlLink_ofwel_false
= mysql_connect('localhost', 'root', '');  // mysql_connect: Returns a MySQL link identifier on success or FALSE on failure.
if($mysqlLink_ofwel_false === FALSE) {
  // indien je hier terecht komt, is er geen connectie gemaakt met mySQL
}
else {
  if(mysql_select_db('mysql', $mysqlLink_ofwel_false) === FALSE) {  // mysql_select_db: Returns TRUE on success or FALSE on failure.
    // indien je hier terecht komt, is de gekozen database niet geselecteerd

  }
  else {
    $sql_query = "SELECT Host, User, Password, Select_priv, Insert_priv, Update_priv FROM user";
    $mysqlResource_ofwel_false = mysql_query($sql_query); // mysql_query: For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
    if ($mysqlResource_ofwel_false === FALSE) {
      // indien je hier terecht komt, geeft de select query een mySQL error.
      // In dit geval is er dus een fout in de manier waarop je je sql-string hebt opgebouwd

    }
    else {
      while($row_ofwel_false = mysql_fetch_array($mysqlResource_ofwel_false)) { // mysql_fetch_assoc: Returns an associative array of strings that corresponds to the fetched row, or FALSE if there are no more rows.
        //

        echo '<pre>'. print_r($row_ofwel_false, TRUE) .'</pre>';
      }
    }
  }
}

?>
Gewijzigd op 25/04/2012 13:55:50 door Kris Peeters
 



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.