Hallo
vielleicht weiß ja jemand von euch wo ich so eine 'Klasse' finde:
Ich suche eine 'Klasse' die mir die Daten in ein Array zurückgibt
und möglichst assosiativ
sudeki
ps.: ja, klar hab ich schon gesucht
Hallo
vielleicht weiß ja jemand von euch wo ich so eine 'Klasse' finde:
Ich suche eine 'Klasse' die mir die Daten in ein Array zurückgibt
und möglichst assosiativ
sudeki
ps.: ja, klar hab ich schon gesucht
am besten du schreibst dir selbst eine oder vielleicht schreibt dir wer eine, warte noch ein bisschen und wenn du dann keine hast schick mir ne pn ich schreib dir dann eine...
Danke Greg, dann wart ich mal noch ein wenig und dann schaue ich mal ob ich mich da mal reinfinde in Klassen, sprich: mal sehen was ich hinbekomm oder ich schreib dir eine pn. Danke schon mal
Aus meiner Wühlkiste:
<?php
include("./inc/class.mysql.php");
$db = new CDb;
$db->connect("localhost", "root", "");
$db->check_error();
$db->select_db("test");
$db->check_error();
$query = "Select name, plz from daten";
$result = $db->query($query);
$db->check_error();
$data = $db->to_array($result);
if ($data !== false)
print_r($data);
?>
Alles anzeigen
<?
/********************************************************************
*
* File: class.mysql.php
*
* Kurzbeschreibung: Eine Klasse zum MySQL-Handling
*
* Erstellungsdatum: 17.01.2004
*
* Letzte Änderung:
*
* Autor: bandit
*
* Copyright 2004 by bandit
*
********************************************************************/
class CDb
{
var $connection;
//---------------------------------------------------------------
function Db()
{
$this->connection = 0;
}
//---------------------------------------------------------------
function connect($hostName, $userName, $pw)
{
$this->connection = @mysql_connect($hostName, $userName, $pw);
return $this->connection;
}
//---------------------------------------------------------------
function connect_db($hostName, $userName, $pw, $db_name)
{
$this->connection = @mysql_connect($hostName, $userName, $pw);
if ($this->connection)
{
$value = mysql_select_db($db_name, $this->connection);
if ($value == false)
{
$this->db_close($this->connection);
$this->connection = 0;
}
}
return $this->connection;
}
//---------------------------------------------------------------
function db_close()
{
if ($this->connection)
{
mysql_close($this->connection);
$this->connection = 0;
}
}
//---------------------------------------------------------------
function select_db($dbName)
{
$result = false;
if ($this->connection)
$result = mysql_select_db($dbName, $this->connection);
return $result;
}
//---------------------------------------------------------------
function query($query="")
{
$result = false;
if (strlen ($query) && $this->connection)
$result = @mysql_query ($query);
return $result;
}
//---------------------------------------------------------------
function num_fields($value=0)
{
$result = 0;
if ($this->connection && $value)
$result = @mysql_num_fields ($value);
return $result;
}
//---------------------------------------------------------------
function num_rows($value)
{
$result = 0;
if ($this->connection && $value)
$result = @mysql_num_rows ($value);
return $result;
}
//---------------------------------------------------------------
function has_error()
{
$result = true;
if ($this->connection)
$result = @mysql_errno();
return $result;
}
//---------------------------------------------------------------
function error_text()
{
$result = false;
if ($this->connection)
$result = @mysql_error();
return $result;
}
//---------------------------------------------------------------
function data_seek($value=0, $position=-1)
{
$result = false;
if ($value && $position >= 0 && $this->connection)
$result = mysql_data_seek($value, $position);
return $result;
}
//---------------------------------------------------------------
function fetch_array($value=0)
{
$result = false;
if ($value && $this->connection)
$result = @mysql_fetch_array($value);
return $result;
}
//---------------------------------------------------------------
function to_array($value=0)
{
$result = false;
if ($value && mysql_num_rows($value))
{
$result = array();
$key = 0;
while ($row = mysql_fetch_assoc($value))
{
$keys = array_keys($row);
$values = array_values($row);
for ($i = 0; $i < count($keys); $i++)
{
$result[$key][$keys[$i]] = $values[$i];
}
$key++;
}
}
return $result;
}
//---------------------------------------------------------------
function fetch_object($value=0)
{
$result = false;
if ($value && $this->connection)
$result = @mysql_fetch_object($value);
return $result;
}
//---------------------------------------------------------------
function result($value=0, $num=-1)
{
$result = false;
if ($value && $num >= 0 && $this->connection)
$result = @mysql_result($value, $num);
return $result;
}
//---------------------------------------------------------------
function inserted_id()
{
$result = false;
if ($this->connection)
$result = mysql_insert_id();
return $result;
}
//---------------------------------------------------------------
function free_query($query)
{
$result = false;
if ($this->connection)
$result = mysql_free_query ($query);
return $result;
}
//---------------------------------------------------------------
function check_error()
{
if ($this->connection)
{
if (mysql_errno ())
die ("Datenbankfehler: " . mysql_error());
}
}
}
?>
Alles anzeigen
Die Klasse ist noch aus meinen PHP-Anfängen und noch nicht auf PHP5 umgestellt, funktioniert aber trotzdem.
also ich hab mir auch mal eine geschrieben
<?php
class mysql
{ var $sql = '',
$daten = 0,
$error = '',
$errno = 0;
function mysql($mysql)
{ $this->sql = $mysql;
if(!($this->daten = @mysql_query($mysql)))
{ $this->error = mysql_error();
$this->errno = mysql_errno();
echo "<h1>Mysql-Fehler</h1>\n";
echo "<p>\n";
echo "SQL: ".$this->sql."<br>\n";
echo "Fehlermeldung: ".$this->error."<br>\n";
echo "Fehlercode: ".$this->errno."<br>\n";
echo "</p>";
die();
}
}
function num()
{ return mysql_num_rows($this->daten);
}
function fetch_assoc()
{ return mysql_fetch_assoc($this->daten);
}
function fetch_object()
{ return mysql_fetch_object($this->daten);
}
function fetch_array()
{ return mysql_fetch_array($this->daten);
}
function free()
{ mysql_free_result($this->daten);
}
}
?>
Alles anzeigen
verwendung:
Eine Sache gefällt mir nicht. Für jede Abfrage musst du ein new mysql ausführen. Und die Fehlerprüfung ist auch nicht flexibel
also ich hab mir auch mal eine geschrieben
Ähm, danke, aber sehe ich richtig dass ich dann per:
$eintrag['Time'] zugreife? Das ist ja nicht Sinn und zweck der Sache, dann könnte ich auch mysql_fetch_assoc nutzen. Es geht ja grade darum ein assosiatives array zu erstellen
Trotzdem dankeschön DoDo!
zu bauen
//edit:
Is das hier besser?
Ganz am Ende sind 3 neue Funktionen, die dir das gewünschte zurückgeben sollten, egal ob assoc(), object() oder array()
<?php
class mysql
{ var $sql = '',
$daten = 0,
$error = '',
$errno = 0;
function mysql($mysql)
{ $this->sql = $mysql;
if(!($this->daten = @mysql_query($mysql)))
{ $this->error = mysql_error();
$this->errno = mysql_errno();
echo "<h1>Mysql-Fehler</h1>\n";
echo "<p>\n";
echo "SQL: ".$this->sql."<br>\n";
echo "Fehlermeldung: ".$this->error."<br>\n";
echo "Fehlercode: ".$this->errno."<br>\n";
echo "</p>";
die();
}
}
public function num()
{ return mysql_num_rows($this->daten);
}
public function fetch_assoc()
{ return mysql_fetch_assoc($this->daten);
}
public function fetch_object()
{ return mysql_fetch_object($this->daten);
}
public function fetch_array()
{ return mysql_fetch_array($this->daten);
}
public function free()
{ mysql_free_result($this->daten);
}
public function fetch_full_assoc()
{ while($back[] = $this->fetch_assoc());
return $back;
}
public function fetch_full_array()
{ while($back[] = $this->fetch_array());
return $back;
}
public function fetch_full_object()
{ while($back[] = $this->fetch_object());
return $back;
}
}
?>
Alles anzeigen
@Bandit:
Sorry hab deinen post jetzt erste gesehen. Jop die Klasse hab ich auch extra für SQLs gemacht und nicht für volle Datenbankverwaltung.
Ist ja nicht böse gemeint, aber du solltest die Fehlerprüfung in eine Funktion auslagern. Es kann ja vorkommen, dass man bei einem Fehler nicht gleich das Script sterben lassen will. Ich habe bei mir die Klasse mit Absicht ohne einen Hinweis auf MySQL benannt. Wenn man es mal mit einer anderen DB zu tun hat, tausche ich an einer Stelle den Include aus und bin fertig. Du müsstest dein Script anpassen, denn wenn man einen anderen DB-Server als MySQL hat, sieht es doof aus, wenn man da MySQL im Script stehen hat. Und dann hat deine Klasse den gleichen Schwachpunkt wie meine, ein Möglichkeit, String zu escapen fehlt.
ja ich hatte noch nie ne andere DB als MySQL^^
Und die verwaltet nur die SQLs, Sicherheit und ähnliches mach ich in meinem Script
also vor der aufruf der klasse
Is eigentlich nur eine kleine spielerei gewesen um klassen zu üben, und hab die jetzt behalten
Wegen dem Fehler: ich habs immer gern, dass bei SQL-Fehlern das Script abbricht, denn sonst könnten weitere fehler entstehen und meine SQL sind ja nicht dazu da, dass sie nicht ausgeführt werden sollen^^
Ähm, und wo ist mysql_connect und mysql_select_db
Klar, in der Regel will man einen Abruch, aber das ist nicht immer so. Für interne Zwecke kann es durchaus sinnvoll sein, das Script weiter laufen zu lassen.
wie gesagt: die klasse handelt nur SQLs und kein Datenbank-System
Die klasse setzt voraus, dass man DB-Verbindung hat.
Ich machs so, dass ich am anfang meiner Scripts immer eine liste mit includes hab, zB so in meinem neuesten Projekt:
<?php
error_reporting(E_ALL);
ini_set("display_errors",true);
include 'inc/constants.php';
include 'inc/connect.php';
include 'inc/functions.php';
include 'inc/classes/mysql.php';
include 'inc/classes/sudoku.php';
//...
?>
Alles anzeigen
Und in connect.php wird in diesem beispiel eine Datenbankverbindung aufgebaut
Und somit klappt die klasse bei mir immer
Meine klasse sind nun mal für mich zugeschnitten, es passiert nciht häufig, dass ich klassen für andere mache
Dankeschön euch allen :-):-)
funktioniert nun tadellos
Kleine Verbesserung
[COLOR=#000000][COLOR=#006600]while([/COLOR][COLOR=#0000cc]$values [/COLOR][COLOR=#006600]= @[/COLOR][COLOR=#0000cc]mysql_fetch_assoc[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$query[/COLOR][COLOR=#006600])) {
[/COLOR][COLOR=#0000cc]$res[/COLOR][COLOR=#006600][] = [/COLOR][COLOR=#0000cc]$values[/COLOR][COLOR=#006600];
}[/COLOR][/COLOR]
wäre so optimiert
[COLOR=#000000][COLOR=#006600]while([/COLOR][COLOR=#0000cc]$[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000cc]res[/COLOR][COLOR=#006600][] [/COLOR][/COLOR][COLOR=#000000][COLOR=#006600]= @[/COLOR][COLOR=#0000cc]mysql_fetch_assoc[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$query[/COLOR][COLOR=#006600]))[/COLOR][COLOR=#006600];[/COLOR][/COLOR]