probleem met mijn getArray functie
ik ben bezig met mijn database class en nu wil ik een functie maken die een array aanmaakt en deze eventueel aan past aan de behoefte.
dus ik wil de key van de array kunnen aanpassen en ook de meegestuurde values.
het probleem is dat ik de waardes wel mee stuur maar er niks gebeurdt
ik zal hier onder mijn functie plaatsen en zou er graag suggesties op willen krijgen om dit problleem op te lossen
de functie
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
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
<?php
public function getArray($keyCol = false, $valueCol = false){
if(!$this->query) die("geen query");
$prep = $this->db->prepare($this->query);
$prep->execute($this->fields);
$arr = array();
while($row = $prep->fetch(PDO::FETCH_ASSOC)){
$arr[] = $row;
}
if (!$keyCol) {
$arr[] = $row;
} elseif (!$keyCol && $valueCol) {
$arr[] = $row[$valueCol];
} elseif ($keyCol && $valueCol) {
$arr[$row][$keyCol] = $row[$valueCol];
} else {
$arr[$row][$keyCol] = $row;
}
return $arr;
}
?>
public function getArray($keyCol = false, $valueCol = false){
if(!$this->query) die("geen query");
$prep = $this->db->prepare($this->query);
$prep->execute($this->fields);
$arr = array();
while($row = $prep->fetch(PDO::FETCH_ASSOC)){
$arr[] = $row;
}
if (!$keyCol) {
$arr[] = $row;
} elseif (!$keyCol && $valueCol) {
$arr[] = $row[$valueCol];
} elseif ($keyCol && $valueCol) {
$arr[$row][$keyCol] = $row[$valueCol];
} else {
$arr[$row][$keyCol] = $row;
}
return $arr;
}
?>
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$db = new pdb();
// hier een query met een where clausule
/* begin query met where clausule.
*
* $db->setQuery("SELECT * FROM tblusers WHERE user_id = :user_id");
* $db->addField(":user_id", 32);
*
* einde
*/
// hier eentje die een gehele tabel ophaalt en er een array van maakt
$db->setQuery("SELECT * FROM tblusers");
// hier geef je $keyCol , $valueCol mee deze staat standaard op false.
$array = $db->getArray();
?>
$db = new pdb();
// hier een query met een where clausule
/* begin query met where clausule.
*
* $db->setQuery("SELECT * FROM tblusers WHERE user_id = :user_id");
* $db->addField(":user_id", 32);
*
* einde
*/
// hier eentje die een gehele tabel ophaalt en er een array van maakt
$db->setQuery("SELECT * FROM tblusers");
// hier geef je $keyCol , $valueCol mee deze staat standaard op false.
$array = $db->getArray();
?>
Je doet een fetch(PDO::FETCH_ASSOC) deze returned een associative array (betekend dat hij de veldnamen retouneerd). Dus je $row is al een array, heeft geen nut om deze nogmaals aan een array te assignen.
Dus als je bijvoorbeeld username, password, name, sirname hebt als velden die je ophaald uit je query haal je die op met $row['username'], $row['password'], $row['name'] en $row['sirname']. Deze ga je dan in je whileloop checken.
Gewijzigd op 15/08/2013 14:59:19 door Chris PHP
1) als die een functie (method) is binnen een class dan moet je zeker geen die() gebruiken bij een fout, maar een exception gooien. Het is niet aan een method of zelfs aan een willekeurige class om te bepalen dat het script gestopt moet worden.
2) je hele if constructie staat buiten je while loop. Dat betekent dat op het moment dat je die if constructie ingaat $row al false is geworden, immers, je hebt alles gefetched dus je data is op.
3) je tweede optie in je if constructie zal nooit gebruikt worden. De eerste is namelijk !$keyCol, dus bij de tweede is dat nog steeds zo. Geldt het niet bij de eerste, dan geldt het ook niet bij de tweede.
4) dit kan nooit: $arr[$row][$keyCol]. $row is een rij (een array dus) uit je database (hoewel zoals vastgesteld bij punt 2 is het false) en kan dus nooit een key zijn van je array.
Maar begin bij het begin, wat probeer je hier uberhaupt mee te doen?
bedankt
Heb je ook al eens naar fetchall gekeken?
http://php.net/manual/en/pdostatement.fetchall.php
Gewijzigd op 15/08/2013 15:11:57 door Erwin H
Ralph vander tang op 15/08/2013 15:08:09:
ik wil van een query een array maken
$row is al een array, geen nut om dat nogmaals als array te assignen schiet je niets mee op.
Een fetch returned een array tenzij je PDO::FETCH_OBJ kiest dan is het een object, maar metPDO::FETCH_ASSOC is het gewoon een array. Kijk naar het advies van Erwin.