30. juli 2006 - 12:34Der er
42 kommentarer og 1 løsning
Klasser og db forbindelse med udskrift
Hej. Jeg har et problem med nedenstående script. Det jeg gerne vil er at oprette en forbindelse til databasen og derefter udskrive noget fra databasen. Jeg kan bare ikke få det til at fungere. Det SKAL være vha klasser, men måske man skulle lave 2 klasser med 1 metode i hver som så nedarver, i stedet for 1 klasser med 2 metoder som vist herunder.
<?PHP
class dbConnect { public $conn; public function __construct($host,$user,$pass,$db) { $conn = mysqli_connect("$host","$user","$pass","$db"); }
public function tester() { $result = mysqli_query($conn,"SELECT * FROM techno"); while ($row = mysqli_fetch($result)) { return $row['Id_techno']."<br />"; } } }
$dbC = new dbConnect("localhost","bruger","kode","database"); $dbC->tester();
Du kan ikke sige return for hver række while ($row = mysqli_fetch($result)) { return $row['Id_techno']."<br />"; } men skal fx samle det op i et array: $a=Array(); while ($row = mysqli_fetch($result)) { $a[]= $row['Id_techno']."<br />"; } return $a;
Jeg behøver ikke at have det i et array erikjacobsen, det jeg skal bruge det til er som et eksempel på hvordan man kan lave en db connection og et udtræk dynamisk i samme klasse eller i 2 klasser vha nedarving :)
Så skal du netop have det i et array - ellers har du ikke adskilt dine konkrete data fra databasen, og dermed har du ikke opnået noget ved at have det i en separat klasse.
Men vil helst holde mig til simpel kode, sådan at f.eks. mysqli_prepare ikke er med og mysqli_stmt_execute osv da denne kode skal være som et eksempel på hvor nemt det egentlig er. Så helst ikke en masse indbyggede funktioner udover den jeg allerede selv har :) Hvis muligt.
Måske vi skulle lave det i 2 klasser ? Så kan db klassen jo bruges overalt uden man skal tænke på query klassen ?
Men hvorfor vil du ikke vide hvad der er galt ?? Fra din oprindelige kode $result = mysqli_query($this->conn, "SELECT * FROM techno"); retter du til $result = mysqli_query($this->conn, "SELECT * FROM techno") or die(mysqli_error($this->conn));
Men er det egentlig ikke bedre at lave det i 2 klasser i stedet ? Mere sådan at man har db klassen for sig selv så man altid kan gøre brug af den alene. Men så skal vi vel igang med nedarving.
30/07-2006 13:11:43> Men det er jo nu engang den måde som mysqli_stmt_fetch() - alias for mysqli_fetch() - virker.
Den kræver at du forbereder en statement via mysqli_prepare() osv. Fejlbeskeden går jo også netop på at den ikke får denne statement, men noget helt andet.
$dbC = new dbConnect("localhost","root","210382","technolog"); echo $dbC->tester();
?>
*****************************'''' Udskriver tallet 14, dette er da også korrekt da der står 14 i db. Men den looper jo ikke igennem db. Der er 8 rows, men udskriver kun 1 selvom den er i en while løkke ??
erikjacobsen -> Hvordan kan det være du vil holde det i een klasse ? Ville det at lave det i 2 ikke gøre klasserne mere dynamisk? Forstået på den måde, at når du skal bruge en forbindelse til din db intialisere du kun db klassen og benytter dig af dette objekt. Hvor imod hvis også queyen er i samme klasse får du den med selvom du måske ikke lige har brug for den.
Ja, selvfølgelig udskriver den "Array". Det er derfor jeg siger du kan prøve print_r(...).
Hold det i een klasse, til du kan se et behov for at dele det op. Hvis du ikke kan argumentere for behovet, så er det der nok ikke. Og nej, bare fordi man komme til at have lidt ekstra funktioner med, som man ikke lige bruger, er ikke noget argument.
$dbC = new dbConnect("localhost","root","210382","technolog"); //print_r($dbC->tester());
foreach ($dbC->tester() as $value) { echo "$value<br />\n"; }
?> ********************************************
Nu vil jeg så gerne høre, om du kan hjælpe mig med at gøre klassen mere dynamisk? Sådan at techno og Id_techno også kan sendes til klassen som en parameter. Og at jeg også kan sende en "WHERE Id_techno==2" med hvis der er behov for en where clause.
Derved opnår vi en fuld ud dynamisk klasse der kan bruges til faktisk alle select queryes.
$db = new dbConnect("localhost","root","210382","technolog"); $db->selectQuery("techno","Id_techno");
foreach ($db->selectQuery() as $value) { echo "$value<br />"; }
?> **********************************************
Men får følgende resultat:
Warning: Missing argument 1 for dbConnect::selectQuery(), called in C:\dbtest.php on line 24 and defined in C:\dbtest.php on line 10 dbtest.php on line 10
Notice: Undefined variable: table in C:\dbtest.php on line 11
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 '' at line 1
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.