PDO: Is er een resultaat
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)
Gewijzigd op 01/01/1970 01:00:00 door Yearupie Achternaamloos
Je sluit je count() verkeerd af. de " > 0 " staat nog in de count.
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.
Ik kan me vaag herinneren dat PDO geen eigen variant had van mysql_num_rows. Daarom ben ik MySQLi gaan gebruiken.
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
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)
Code (php)
Foutafhandeling van PDO gaat heet makkelijk als volgt
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
En hoe kan ik dan nou het aantal resultaten bekijken en daarna de query in een while of foreach gebruiken?
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
34
35
36
37
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&deletefriend=".$vriend['username']."'>Verwijder van vriendenlijst</a></td></tr>";
}
echo "</table></div></p>";
}
}
?>
$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&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
Doe eens var_dump($result)
wat krijg je te zien?
SQL dump:
Code (php)
1
2
3
4
5
6
7
8
9
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');
`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
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
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>';
}
}
}
?>
$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
Code (php)
1
2
3
4
5
6
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'];
?>
$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