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-Key: 286029

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

Printed on: April 19, 2024 at 04:04 o'clock

Member: Tjelvar
Solution Tjelvar Oct 19, 2015 updated at 13:26:30 (UTC)
Goto Top
http://php.net/manual/de/language.variables.scope.php

Lies dir mal den Punkt global durch face-smile

Gruß Tjelvar
Member: Budders
Budders Oct 19, 2015 at 13:30:05 (UTC)
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'];  
		}
Member: Guenni
Solution Guenni Oct 23, 2015, updated at Oct 26, 2015 at 06:53:23 (UTC)
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
Member: Budders
Budders Oct 26, 2015 at 07:01:10 (UTC)
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