budders
Goto Top

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.

/* 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. face-smile

Vielen Dank für eure Zeit.

Mit freundlichen Grüßen
Budders

Content-ID: 286029

Url: https://administrator.de/contentid/286029

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

Tjelvar
Lösung Tjelvar 19.10.2015 aktualisiert um 15:26:30 Uhr
Goto Top
http://php.net/manual/de/language.variables.scope.php

Lies dir mal den Punkt global durch face-smile

Gruß Tjelvar
Budders
Budders 19.10.2015 um 15:30:05 Uhr
Goto Top
Danke Dir Tjelvar!

Habe es jetzt hin bekommen. Die Variable als Global zu definieren war zwar nicht das einzige was bei mir falsch war aber danach hatte ich ja auch nicht gefragt ^^
Sieht jetzt so bei mir aus.

<?php
function connect_db() {
	$host="127.0.0.1";  
	$user="xxx";  
	$pass="yyy";  
	$data="zzz";  
	$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) {
	$mysqli = connect_db();
	$result = $mysqli->query($query);
	if(!$result){
		trigger_error("Fehler bei Datenauswahl");  
	}
	global $result_array;
	if($result->num_rows > 0) {
		while($row = $result->fetch_assoc()) {
			$result_array = $row; 
		}
	}
	else {
		echo 'Keine Datensätze';	  
	}
	return $result_array;
}
?>

/* Aufruf durch: */
include 'functions.php';  
		$query="SELECT * FROM spedition";  
		do_query($query);
		foreach($result_array as $row) {
			echo $row['spedition_id'] . $row['spedition_name'];  
		}
Guenni
Lösung Guenni 23.10.2015, aktualisiert am 26.10.2015 um 07:53:23 Uhr
Goto Top
Hi Budders,

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 face-smile 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
Budders
Budders 26.10.2015 um 08:01:10 Uhr
Goto Top
Hallo Guenni,

Danke für dein ausführliches Feedback face-smile
Ich werde mir deine Ratschläge zu Herzen nehmen!
Das mit den echo Ausgaben innerhalb der Funktionen werde ich mir abgewöhnen.

Sollte ich noch mal Fragen zu PHP haben werde ich mich an dich wenden, sollte ich durch eigene Recherche nicht weiter kommen face-smile

Gruß und Danke
Budders