Probleme mit eienem Query

Kalito

Erfahrenes Mitglied
Hallo,

ich brauche aus einer DB den größten Wert einer Id (Auto Increment-Wert)
Aber irgendwie scheint mein Abfrage nicht hinzuhauen.

Ich hab es mit folgenden Code propiert

PHP:
$id = mysql_query("SELECT MAX(id) FROM ".DB_TABLE_USER);
und
PHP:
$id = mysql_query("SELECT id FROM ".DB_TABLE_USER." ORDER BY id DESC");

Wenn ich aber nun mit

PHP:
$new = mysql_fetch_array($id);
echo $id['id'];

anzeigen will, dann bekomme ich die Fehlermeldung, das der mysql_fetch_array einen Wert zum übermitteln braucht. Wenn ich nun aber mit var_dump mir den Query anzeigen und ihn dann im phpmyadmin ausführen lasse, dann bekomme ich ein Ergebnis angezeigt.
DB_TABLE_USER ist richtig definiert, weil es im var_dump richtig übermittelt wird

Woran könnte es also liegen?
 
item: Im ersten und eigentlich richtigen Versuch solltest du deiner Spalte noch ein Alias mitgeben auf den du dann zugreiffen kannst
item: Der Array mit den Wertinhalten ist nicht $id sondern $new (Return-Wert der Funktion mysql_fetch_array())

PHP:
$id = mysql_query("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER); 
$new = mysql_fetch_array($id);
echo $new['max_id'];
 
PHP:
$id = mysql_query("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER); 
$new = mysql_fetch_array($id);
echo $new['max_id'];

Will trotzdem nicht klappen. Es kommt weiterhin der Fehler mysql_fetch_array(): supplied argument is not a valid MySQL result resource in.....

Wenn ich den oberen Query mit var_dump() ausgeben lasse, kommt folgender String:
string(43) "SELECT MAX(id) AS max_id FROM `jos_users` "

Wenn ich nun den Query bei phpmyadmin eingebe, dann bekomme ich die Tabelle mit dem Spaltentitel max_id und den höchsten Wert der Tabelle.

Kann es daran liegen, das ich schon davor 2 SQL-Abfragen habe, die aber an eine andere DB gehen. Es kommt auch zu keiner Überschneidung der Variablen
 
Ändere mal die SQL-Anweisung so das der Tabllenname nicht in Anführungszeichen steht. Außerdem sieht es so aus als ob am Ende noch ein Leerzeichen enthalten ist (wobei das nicht so relevant sein dürfte, ohne ist sicher trotzdem besser).

NACHTRAG:
Was mir noch einfällt. Kürzlich hat var_dump am Bildschirm auch etwas angezeigt doch im Seitenquelltext stand etwas anderes!
Schau dir mal den Quelltext der Seite an nachdem, nicht das es hier auch so ist.
 
Zuletzt bearbeitet:
Wenn du nebenher noch eine Connection zu einer anderen DB hast, solltest du bei mysql_query sicherheitshalber die Resource der Verbindung als 2tes Argument mitgeben ($Verbindungs-Kennung).

Code:
resource mysql_query ( string $Anfrage [, resource $Verbindungs-Kennung ] )

Nachtrag: @tombe
Diese ` Zeichen sind schon gut. Sie sicher in den Fall ab, dass der Tabellenname Leerzeichen, Bindestriche oder sowas beinhaltet oder das der Tabellennamen gleich einem SQL Befehl ist (zb. Tabellenname `data`).
 
hm, also ich hab ein bissel mein Script umgeschrieben.
DB-zugang.php
PHP:
    include('pass.php');

    $verbindung = false;
    $verbindung2 = false;
     function db_connect() {
	   global $verbindung;
       $verbindung = mysql_connect(DB_SERVER, DB_USER, DB_PW);
       mysql_select_db(DB_NAME);
       if(mysql_error()) {
           $verbindung = false;
       }
       global $verbindung2;
       $verbindung2 = mysql_connect(DB_SERVER, DB_USER_L, DB_PW_L);
       mysql_select_db(DB_NAME_L);
       if(mysql_error()) {
           $verbindung2 = false;
       }
	   return $verbindung;
	   return $verbindung2;
     }

Des weiteren hab ich alle Querys umgeschrieben
PHP:
$mitglieder = mysql_query("SELECT MID,Status FROM ".DB_TABLE_M." WHERE Status='activ' ORDER BY MID" , $verbindung);

Soweit so gut und alles funktioniert. Und ich bekomme keine Fehlermeldung.
Trotzdem bekomme ich nachwievor bei dem Query keien Fehlermeldung

PHP:
$id =("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER , $verbindung2);
kommt der Fehler yntax error, unexpected ',' in
Folgendes hab ich probiert:
PHP:
$id =("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER);
$id =("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER. ",".  $verbindung2);
$id =("SELECT MAX(id) AS max_id FROM ".DB_TABLE_USER." "  ,  $verbindung2);

Aber leider erfolglos. Entweder kommt der Fehler wegen dem Komma oder ein mysql_fetch_array(): supplied argument

Den Zugriff gestalte ich so
PHP:
include ('check.php');
include('../DB_zugang.php');
if($connection = db_connect()){
    include ('function.php');
    $query= mysql_query("SELECT MID FROM ".DB_TABLE_M." WHERE MID='".$_SESSION['username']."'", $verbindung);
    If(mysql_num_rows($query) == 1 ) $site = "site1.php";
    else $site= 'site2.php';

        if(isset($_GET['site'])){
            switch($_GET['site']){
                case 1: $site = 'site1.php'; break;
                case 2: $site = 'site2.php'; break;´
                case 3: $site = 'site3.php'; break;
                //Logout
                case 6: $site = "logout.php"; break;

            }
        }

    include $site;
}

Quelltext hat den selben Inhalt, wie der Browser
 
Zuletzt bearbeitet:
Diese ` Zeichen sind schon gut. Sie sicher in den Fall ab, dass der Tabellenname Leerzeichen, Bindestriche oder sowas beinhaltet oder das der Tabellennamen gleich einem SQL Befehl ist (zb. Tabellenname `data`).

Hmm also im Query würde ich ungernst mit diesem Zeichen ` arbeiten. Hab neulich sone Challenge gespielt wo genau das die Schwachstelle war da es nicht von mysql_real_escape_string() Escaped wird.
Korigiert mich wenn ich jetz Blödsinn rede :)
 
naja, aber ohne diese funktionieren andere QUerys bei mir nicht. Hatte es auch ohne die getestet, was aber zum selben Ergebnis führt
 
Sehe bei dir das Zeichen ` in deinem Code garnicht. Soweit ich sehe nutzt du doppelte und einfache Anführungszeichen also diese: " und ' .

Was nun dein Problem direckt betrifft, dazu kann ich leider nix sagen. Zumindest sehe ich den Fehler grade nicht.
 
lol

ich hab in der DB_zugang.php die pass.php includiert. Dort habe ich alle Tabellen, ect definiert
PHP:
define('DB_TABLE_USER','`jos_users`');
 
Zuletzt bearbeitet:
Zurück