PDO: Is er een resultaat
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:
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
Gesponsorde koppelingen:
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.
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.
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
Zo doe ik het altijd.
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)
Zo doe ik het altijd.
Foutafhandeling van PDO gaat heet makkelijk als volgt
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?
Dat heb ik dus ook maar het werkt niet en geeft ook geen output:
Als ik de errorinfo erin gooi geeft hij alleen maar nullen aan.
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
Heb je wel resultaat?
Doe eens var_dump($result)
wat krijg je te zien?
Doe eens var_dump($result)
wat krijg je te zien?
array(0) { }
SQL dump:
$gebruiker['id'] == 1
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
Ik heb het eens even getest en volgens mij is er iets fouts met $gebruiker['id'], want zo werkt ie bij mij wel.
Volgens mij is die count niet echt nodig. Want als de array leeg is wordt die foreach ook niet doorlopen.
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
Aangezien mijn website nog niet zo heel ver is, zit er een fout in een ander bestand:
Dit geeft geen output, weet iemand wat hier niet goed in zit?
edit: ik zal er wel uitkomen:
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



