Mysqli in eigenen PHP Funktionen
Halli Hallo liebe Administratoren,
schon mal Vorweg: ich habe mich die letzten Wochen dran gemacht mich mit PHP zu beschäftigen und möchte gerne mehr eigene Funktionen nutzen.
Nun zu meinem Problem:
Ich möchte Funktionen nutzen um Querys mit mysqli zu senden, nur scheint die Interaktion zwischen meiner Verbindungsfunktion und der Query Funktion nicht ganz zu funktionieren.
Ich bekomme die Fehler:
Notice: Undefined variable: mysqli
Fatal error: Call to a member function query() on null
die sich beide auf die Zeile "$result = $mysqli->query($query);" aus der Funktion do_query() beziehen.
Ich bin für jedes Feedback dankbar und solltet ihr Quellen haben, die mich bei der Thematik weiter bringen könnten, ziehe ich diese auch gerne dazu.
Vielen Dank für eure Zeit.
Mit freundlichen Grüßen
Budders
schon mal Vorweg: ich habe mich die letzten Wochen dran gemacht mich mit PHP zu beschäftigen und möchte gerne mehr eigene Funktionen nutzen.
Nun zu meinem Problem:
Ich möchte Funktionen nutzen um Querys mit mysqli zu senden, nur scheint die Interaktion zwischen meiner Verbindungsfunktion und der Query Funktion nicht ganz zu funktionieren.
/* Meine Funktionen in der functions.php */
function connect_db() {
$host="127.0.0.1";
$user="yyyyyyy";
$pass="xxxxxxx";
$data="zzzzzzz";
$mysqli = new mysqli($host,$user,$pass,$data);
if ($mysqli->connect_error) {
die('Verbindungsfehler (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
} else { echo "Erfolgreich Verbunden.";}
return $mysqli;
}
function do_query($query) {
connect_db();
$result = $mysqli->query($query);
if(!$result){
trigger_error("Fehler bei Datenauswahl");
}
while($row = $result->fetch_assoc()){
$result_array = $row;
}
return $result_array;
}
/* Aufruf der Funktionen */
<?php
include 'functions.php';
$query="SELECT * FROM SPEDITION";
do_query($query);
?>
Ich bekomme die Fehler:
Notice: Undefined variable: mysqli
Fatal error: Call to a member function query() on null
die sich beide auf die Zeile "$result = $mysqli->query($query);" aus der Funktion do_query() beziehen.
Ich bin für jedes Feedback dankbar und solltet ihr Quellen haben, die mich bei der Thematik weiter bringen könnten, ziehe ich diese auch gerne dazu.
Vielen Dank für eure Zeit.
Mit freundlichen Grüßen
Budders
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286029
Url: https://administrator.de/contentid/286029
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
http://php.net/manual/de/language.variables.scope.php
Lies dir mal den Punkt global durch
Gruß Tjelvar
Lies dir mal den Punkt global durch
Gruß Tjelvar
Hi Budders,
wenn du deine Funktionen innerhalb einer Klasse definierst,
sparst du dir in deinen Funktionen den Aufruf deiner Verbindung . . .
Zum zweiten ist es guter Stil, wenn Funktionen einen Wert, einen Ausdruck etc. . . zurückgeben,
anstatt innerhalb einer Funktion eine echo-Ausgabe zu machen. Das ist jetzt kein Klugsch...,
wenn du im PHP-Manual nach Funktionen suchst, siehst du, dass Funktionen nie eine Ausgabe machen,
sondern immer etwas zurückgeben Die Rückgabe wird dann entspr. ausgewertet.
Und ein Array gibst du doch schon zurück, warum dann ein global $result_array; innerhalb deiner Funktion??
Gruß
Guenni
wenn du deine Funktionen innerhalb einer Klasse definierst,
sparst du dir in deinen Funktionen den Aufruf deiner Verbindung . . .
function do_query($query) {
$mysqli = connect_db();
. . .
. . .
}
Zum zweiten ist es guter Stil, wenn Funktionen einen Wert, einen Ausdruck etc. . . zurückgeben,
anstatt innerhalb einer Funktion eine echo-Ausgabe zu machen. Das ist jetzt kein Klugsch...,
wenn du im PHP-Manual nach Funktionen suchst, siehst du, dass Funktionen nie eine Ausgabe machen,
sondern immer etwas zurückgeben Die Rückgabe wird dann entspr. ausgewertet.
Und ein Array gibst du doch schon zurück, warum dann ein global $result_array; innerhalb deiner Funktion??
<?php
class CmyDB{
private $conn;
public function __construct($user, $pass, $data, $host = "localhost"){
$this->conn = new mysqli($host,$user,$pass,$data);
if(!$this->conn) return false;
return true;
}
public function doQuery($query_string){
$result_array = array();
$result = $this->conn->query($query_string);
while($row = $result->fetch_assoc()) {
$result_array = $row;
}
if(count($result_array) == 0) return false;
return $result_array;
}
}
?>
<?php
include("a_0_myDB-Class.inc.php");
$myDB = new CmyDB("guenni", "guenni", "test");
$query = "select * from tabelle2 where id > 21";
$result = $myDB->doQuery($query);
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<script src="jquery-1.10.1.js" type="text/javascript"></script>
</head>
<body>
<pre>
<?php
if($result){
print_r($result);
}else{
echo "Die Anfrage <i>".$query."</i> ergab kein Ergebnis.";
}
?>
</pre>
</body>
</html>
Gruß
Guenni