PDO: Is er een resultaat

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 18:39:00
Quote Anchor link
Beste php'ers,

Op moment heb ik een scriptje die niet helemaal werkt.
Ik controleer eerst of er meer dan 0 resultaten zijn en FETCH hem dan in een while maar dat werkt niet. Hoe kan ik kijken of er een resultaat is zonder fetchAll te gebruiken?

voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$query
= prepare($sql);
$query->execute();
if(count($query->fetchAll()) > 0)
{

    while($row = $query->fetch(PDO::FETCH_ASSOC))
    {

        echo $row['username'];
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 
PHP hulp

PHP hulp

16/05/2021 10:28:11
 
- Mark -

- Mark -

12/01/2010 18:41:00
Quote Anchor link
Je sluit je count() verkeerd af. de " > 0 " staat nog in de count.
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 18:43:00
Quote Anchor link
Mark schreef op 12.01.2010 18:41:
Je sluit je count() verkeerd af. de " > 0 " staat nog in de count.

Oke foutje, ik heb dit net als voorbeeld getypt.
Maar mijn enige echte vraag is hoe ik kan kijken of er een resultaat is zonder fetchAll te gebruiken.
 
- Mark -

- Mark -

12/01/2010 18:49:00
Quote Anchor link
Oeps sorry ik bad je post niet geheel gelezen, Alleen even naar de code gekeken.

Ik kan me vaag herinneren dat PDO geen eigen variant had van mysql_num_rows. Daarom ben ik MySQLi gaan gebruiken.
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 18:53:00
Quote Anchor link
Quote:
For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.


Weet iemand welke database wel en welke niet werkt?
En werkt die altijd bij die database?

edit: ik heb trouwens MySQL 5.1.30 en PHP 5.2.5
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 
Mr.Moe

Mr.Moe

12/01/2010 19:12:00
Quote Anchor link
Zo doe ik het altijd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$query
= prepare($sql);
$query->execute();
$rsQuery = $query->fetchAll();
foreach($rsQuery as $output){
      echo $output['username'];
}

?>
 
Jelmer -

Jelmer -

12/01/2010 19:13:00
Quote Anchor link
Ligt eraan of je database-driver van tevoren al alle resultaten binnenhaalt, of dat pas doet wanneer je fetch aanroept. (in de mysql driver heet het iets met buffered results)
 
Mr.Moe

Mr.Moe

12/01/2010 19:22:00
Quote Anchor link
Zo doe ik het altijd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$query
= $db->prepare($sql);
$query->execute();
$rsQuery = $query->fetchAll();
foreach($rsQuery as $output){
      echo $output['username'];
}

?>


Foutafhandeling van PDO gaat heet makkelijk als volgt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
print_r($query->errorInfo());
?>
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 19:47:00
Quote Anchor link
En hoe kan ik dan nou het aantal resultaten bekijken en daarna de query in een while of foreach gebruiken?
 
Mr.Moe

Mr.Moe

12/01/2010 19:52:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo count($rsQuery);
?>
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 19:58:00
Quote Anchor link
Dat heb ik dus ook maar het werkt niet en geeft ook geen output:

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
<?php
$sql
= "SELECT * FROM vrienden WHERE user_id1 = :id OR user_id2 = :id";
$query = $db->prepare($sql);
$query->bindvalue(':id',$gebruiker['id'],PDO::PARAM_INT);
$query->execute();

# $row aanmaken, vrienden database
$result = $query->fetchAll();

if(count($result) > 0){
    foreach($result AS $row)
    {

        echo "<p><div class='tabel'><table>";
        echo "<tr><td class='up'>Naam</td><td class='up'>Laatste login</td></tr>";
        
        if($row['user_id1'] == $gebruiker['id']){
            
            # Als jij user1 bent
            $vriend = $db->prepare("SELECT * FROM members WHERE id = ".$row['user_id2']);
        }

        else{
            
            # Als jij user2 bent
            $vriend = $db->prepare("SELECT * FROM members WHERE id = ".$row['user_id1']);
        }

        
        $vriend->execute();

        # Vriendenlijst schrijven
        while($vriend = $vriend->fetch(PDO::FETCH_ASSOC)){
            
            echo "<tr><td>".$vriend['username']."</td><td>".$vriend['last_login']."</td><td><a href='index.php?p=friends&amp;deletefriend=".$vriend['username']."'>Verwijder van vriendenlijst</a></td></tr>";
        }
        
        echo "</table></div></p>";
    }
}

?>

Als ik de errorinfo erin gooi geeft hij alleen maar nullen aan.
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 
Mr.Moe

Mr.Moe

12/01/2010 20:06:00
Quote Anchor link
Heb je wel resultaat?
Doe eens var_dump($result)
wat krijg je te zien?
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 20:10:00
Quote Anchor link
array(0) { }

SQL dump:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE `vrienden` (
  `user_id1` int(11) NOT NULL,
  `user_id2` int(11) NOT NULL,
  `datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


INSERT INTO `vrienden` VALUES (1, 7, '2009-12-24 15:48:02');
INSERT INTO `vrienden` VALUES (1, 8, '0000-00-00 00:00:00');


$gebruiker['id'] == 1
 
Mr.Moe

Mr.Moe

12/01/2010 20:56:00
Quote Anchor link
Ik heb het eens even getest en volgens mij is er iets fouts met $gebruiker['id'], want zo werkt ie bij mij wel.
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
<?php
$dsn
= 'mysql:dbname=testzone;host=localhost';
$user = '';
$password = '';

$db = new PDO($dsn, $user, $password);
$sql = "SELECT * FROM vrienden WHERE user_id1 = :id OR user_id2 = :id";
$query = $db->prepare($sql);
$query->bindvalue(':id',1);
$query->execute();
print_r($query->errorInfo());
# $row aanmaken, vrienden database
$result = $query->fetchAll();

if(count($result) > 0){
    foreach($result AS $row)
    {
      
        if($row['user_id1'] == 1){          
            echo '<p>Ik ben user1</p>';
        }

        else{
            echo '<p>Ik ben user2</p>';
        }
    }
}

?>

Volgens mij is die count niet echt nodig. Want als de array leeg is wordt die foreach ook niet doorlopen.
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
 
Yearupie Achternaamloos

Yearupie Achternaamloos

12/01/2010 21:06:00
Quote Anchor link
Aangezien mijn website nog niet zo heel ver is, zit er een fout in een ander bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$query
= $db->prepare("SELECT * FROM members WHERE username = '".$_SESSION['username']."'");
$query->execute();
$gebruiker = $query->fetch(PDO::FETCH_ASSOC);
echo $gebruiker['id'];
?>


Dit geeft geen output, weet iemand wat hier niet goed in zit?

edit: ik zal er wel uitkomen:
Quote:
Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'yearupie''' at line 1 )
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
 



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.