Fehler in MySQL-Klasse, obwohl korrekt ausgeführt

28dayslater

Mitglied
Meine Datenbank Klasse, hier der MySQL-Part.....

PHP:
<?php
$db_host='localhost';
$db_user='root';
$db_password='';
$db_database='cms';

$db=new mysql($db_host,$db_user,$db_password,$db_database);



class mysql
{
var $link;

function mysql($host,$user,$password,$database)
{
$this->link=mysql_connect($host,$user,$password);
mysql_select_db($database,$this->link);
}

function query($query)
{
$result= mysql_query($query,$this->link);
$row=mysql_fetch_assoc($result);       //mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
return $row;
}

}

?>


Da wo ich es markiert habe, tritt ein Fehler auf, die Anfrage wird aber trotzdem korrekt ausgeführt und die Daten ins Array gepackt.
Ich könnte es radikal mit @ lösen, will aber trotzdem wissen, was falsch ist...

:eek:

ich bin dafür grade blind!

mfg
28
 
Hi,

irgendeine Anfrage wird schon fehlschlagen. Du könntest mal mysql_error() und den QueryString ausgeben lassen, falls $result false ist.
Wäre es ausserdem nicht besser, wenn die query-Methode nur die result-Resource liefert und Du noch eine fetch-Methode schreibst. So kannst Du doch immer nur einen Datensatz lesen...

LG
 
Ja, stimmt, ich könnte es noch ausführlicher machen, in meinem Fall, einem kleinen Script reicht es aber auch so.

zum Problem:

PHP:
<?php
echo mysql_error().'<br>';
echo $query.'<br>';
?>


ergab:

SELECT * FROM `sessions` WHERE id='a6czb6D61a97N49c65eNUm53ke7fyY'

SELECT* FROM `users` WHERE id='1'

Kein Fehler wird angezeigt, Sessions und User Query anscheinend auch richtig...ich lasse alle Tabellenspalten ausgeben und alles ist korrekt!
 
Das ist mein Login-Script, wo die Klasse die über include/database.php eingebunden wird und benutzt....
In der Index.php wird bei den Querys der gleich Fehler ausgeben.
Aber hier halt ein Beispiel.

Jetzt folgt nen bissel Code:


PHP:
<?php
require('include/config.php');
require('include/database.php');

if (!empty($_REQUEST['username']))
{
$username=$_REQUEST['username'];
    if (!empty($_REQUEST['userpass']))
    {
         $userpass=md5($_REQUEST['userpass']);

         $user=$db->query("SELECT * FROM `users` WHERE name='".$username."' AND pass='".$userpass."';");

                   if (!empty($user['id']))
             {
                 setcookie($session_name, '', time()-$session_max_time);
                 $db->query("DELETE FROM `sessions` WHERE user='".$user['id']."';");


                 //ID erzeugen
                 $id=substr(md5(microtime()),0,20);
                  for ($i=0;$i<5;$i++)
                  {
                                 $id.=chr(rand(65,90));
                    $id.=chr(rand(97,122));
                             }
        $id=str_shuffle($id);



                 $db->query("INSERT INTO `".$db_database."`.`sessions` (`id` ,`user` ,`time`) VALUES ('".$id."', '".$user['id']."', '".(time()+$session_max_time)."');");

        setcookie($session_name, $id, time()+$session_max_time);
                 }
    }
}
header("location: index.php");
exit();
?>
 
PHP:
function query($query)
{
$result= mysql_query($query,$this->link);
$row=mysql_fetch_assoc($result);       //mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
return $row;
}

PHP:
$db->query("DELETE FROM `sessions` WHERE user='".$user['id']."';");

Wenn du [phpf]mysql_fetch_assoc[/phpf] auf ein DELETE Statement anwendest, wirst du natürlich einen SQL Fehler erhalten.
Das gleiche gilt für das INSERT Statement, weiter unten.
 
Zurück