Hey Allemaal!
Ik heb even een vraag. Ik gebruik nu sinds enige tijd PDO voor het ophalen van gegevens uit database, alleen nu heb ik het volgende probleem, bij deze code:
functions.php
<?PHP
public function addPetition($name,$email,$club,$date,$ip,$mobile = 0)
{
$query = "INSERT INTO db_petitie (petitie_id, petitie_name, petitie_email, petitie_club, petitie_hash, petitie_status, petitie_date, petitie_mobile, petitie_ip) VALUES (DEFAULT,:name,:emailadres,:club,:hash,0,:date, :mobile, :ip)";
if(empty($_GET['admin'])) { if(!empty($_COOKIE['PetitionCookie']))
throw new InvalidPetitionException ('U heeft dit formulier onlangs ingevuld.'); }
if(strlen(trim($name)) < 3)
throw new InvalidPetitionException ('Uw naam moet 3 tekens of meer bevatten.');
if (!preg_match("/^[a-zA-Z ]*$/",$name))
throw new InvalidPetitionException ('Uw naam heeft niet het juiste formaat.');
if(strlen(trim(empty($club))))
throw new InvalidPetitionException ('U heeft geen club geselecteerd.');
if(strlen(trim($email)) < 6)
throw new InvalidPetitionException ('E-mailadres moet 6 tekens of meer bevatten.');
if(isValidEmail($email) != 'goed')
throw new InvalidPetitionException ('E-mailadres heeft een onjuist formaat.');
Nu kan het zijn dat de query een aantal van 0, 1 of meer dan 1 geeft. Bij aantallen meer dan 1, gaat de foreach lus goed. Echter, bij een aantal van 0 (toon "geen resultaten") of 1 (fetch ipv fetchall?) moet er wat anders gebeuren. Hoe bouw ik dat hier in? Ik kom er niet meer uit.
Ik zie niet echt wat petitioncontroller doet, maar ik neem aan dat "$petition->getPetition()" een fetchAll op je tabel doet?
Als dat zo is, kan je count($overall) gebruiken om in te zien hoeveel "rows" er geprint moeten gaan worden en alleen de foreach lus uitvoert als deze groter is dan #.
Zelf ben ik wel eens tegen de muur aangelopen met SELECT niet kan bekijken met "rowCount" aangezien dit alleen werkt op: DELETE, INSERT en UPDATE, affected_rows() met een nieuwe naam >.>
Ik zie niet echt wat petitioncontroller doet, maar ik neem aan dat "$petition->getPetition()" een fetchAll op je tabel doet?
Als dat zo is, kan je count($overall) gebruiken om in te zien hoeveel "rows" er geprint moeten gaan worden en alleen de foreach lus uitvoert als deze groter is dan #.
Zelf ben ik wel eens tegen de muur aangelopen met SELECT niet kan bekijken met "rowCount" aangezien dit alleen werkt op: DELETE, INSERT en UPDATE, affected_rows() met een nieuwe naam >.>
Wat Johan zegt, hoe ziet getPetition() eruit? Misschien haal je per ongeluk al 1 resultaat op ofzo? Je zou prima door een array met 1 element heen moeten kunnen loopen?
@Johan je kunt rowCount() gebruiken voor "num_rows" functionaliteit als je in je DSN de instelling PDO::MYSQL_ATTR_USE_BUFFERED_QUERY op true zet. De waarde van de instelling PDO::MYSQL_ATTR_FOUND_ROWS (die eigenlijk voor deze functionaliteit bedoeld is) lijkt niet uit te maken. Blijkbaar heb je impliciet ondersteuning voor "num_rows" als gebufferde queries aan staan, wat op zich wel logisch is.
Ik heb wel het idee dat de default waarden van dit soort instellingen per PHP versie nogal verschillen, dus je zult even moeten kijken wat voor jouw versie werkt, YMMV (Your Mileage May Vary).