[PHP/MySQL] mysql_fetch_object(): supplied argument...

unregiert

abgemeldet
22 April 2006
451
26
Ja, ich habe in die FAQ geschaut, aber dennoch zeigt er mir die Fehlermeldung an. MySQL Datenbank existiert, Funktionen stimmen, aber er zeigt die Fehlermeldung an.

Die Fehlerquelle ist markiert. In dosql wird überprüft, ob es einen Fehler gibt.

PHP:
  function loadtxt($name)
  {
    /* search for sid */
    /* FEHLERQUELLE */ $result = dosql("SELECT `pageid`, `name` FROM `cms_page` WHERE `name` = '%s';", $name);
    $data = mysql_fetch_object($result);
    echo $data->pageid;
    /* parent 1 */
  }
  /*
    dosql( sql_code ) do a sql command
  */
  function dosql($queryformat)
  {
    $queryargs=func_get_args();
    
    $vars=array();
    for($i=1;$i<count($queryargs);$i++)
        $vars[]=mysql_real_escape_string($queryargs[$i]);
        
    $querystring=vsprintf($queryformat,$vars);
    return mysql_query($querystring) OR pageerror("mysql", mysql_error());
  }
  
  /*
    pageerror( type , value ) break a page and send a error
  */
  function pageerror($type = "na", $value)
  {
    print "<h1>Fehler entdeckt</h1>";
    print "Server sandte folgenden Fehlermodus: ".$type."<br />";
    print "Fehler wurde generiert um ".date("H:i:s \a\m d.m.Y", time())."<br />";
    print "Request hiess folgendermassen: <code>".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']."</code><br />";
    print "<br />Fehlercode lautet:<br /><code>".$value."</code>";
    exit;die;
  }
 
Die Funktion kenne ich doch^^
hast du dir mal dumpen lassen, was dosql dir zurückgibt? ich kann mir wirklich nur erklären, das er nen false zurückgibt und deshalb die folgende funktion nicht geht. also mal nen var_dump auf den return-wert setzen
 
Und was passiert wenn du den Query so im phpmyadmin absetzt bzw. mal zum test ein normalen standart Query ohne die funktion. Ich würde mal im phpmyadmin testen. Bzw. schreib ein var_dump auf den umgebauten Query in der funktion dann kannst du sagen der syntax stimmt.
 
Und was passiert wenn du den Query so im phpmyadmin absetzt bzw. mal zum test ein normalen standart Query ohne die funktion. Ich würde mal im phpmyadmin testen. Bzw. schreib ein var_dump auf den umgebauten Query in der funktion dann kannst du sagen der syntax stimmt.
Schon gemacht ;) Aber er zeeeigt nix an :(
 
Hö wie meinst du das er zeigt nix an? Was genau phpmyadmin oder die funktion den umgebauten Query?

Was soll denn das ; im Query? Das gehört da nicht hin siehe hier dort steht wie man die funktion nutzt.
 
Zuletzt bearbeitet von einem Moderator:
Am Semikolon in der Query dürfte es nicht liegen, aber entfern es trotzdem mal.

Ich fass zusammen:
- mysql_query() liefert true
- trotzdem wird der Fehler angezeigt
? :hö:

Was mir nicht gefällt, also wo ich mir unsicher wäre, is die OR-Konstruktion :think:
Probiers mal so:
PHP:
// return mysql_query($querystring) OR pageerror("mysql", mysql_error());
if(mysql_query($querystring))
  return true;
else
  pageerror("mysql", mysql_error());
 
Hast Rechts habs grad getestet.

in der Funktion am ende anstatt dem or Statement
PHP:
    if($res = mysql_query($querystring))
      return $res;
    else
      return mysql_error();

bringt das ergebnis. An dem ; lag es nicht.

Ps danke fürs zusammenlegen, muss ich dir jetzt nen cent überweisen? :mrgreen:
 
Was mir nicht gefällt, also wo ich mir unsicher wäre, is die OR-Konstruktion :think:

das ganze konstrukt liefert doch true zurück, nur kann ich mir das net vorstellen

Edit: habe den source mal getestet, klar das das net geht^^ die Funktion loadtxt bekommt von der funktion dosql bool(true) aber sollte er net ne ressource bekommen? :LOL:
 
ich würde das ja so machen:

PHP:
return (mysql_query($querystring)?mysql_query($querystring):pageerror("mysql", mysql_error()));
bzw. hätte ich den Abbruch schon innerhalb der Funktion gemacht
 
PHP:
  function dosql($queryformat)
  {
    $queryargs=func_get_args();

    $vars=array();
    for($i=1;$i<count($queryargs);$i++)
        $vars[]=mysql_real_escape_string($queryargs[$i]);

    $querystring=vsprintf($queryformat,$vars);

    return(is_resource($res=mysql_query($querystring))?$res:pageerror("mysql", mysql_error()));
  }

getestet und funzt nun ;)

@LasMiranda: sehr ineffizent 2 mal den Query auszuführen oder?
 
Verknüpft mit dem Thread, gibt es eine weitere Fehlerquelle:
Mein System, so wie ich es gerne hätte, soll mit einer Funktion funktionieren, die rekursiv ist. Ich möchte mit dieser Funktion Seiten generieren lassen, dessen Elemente (h1, h2, h3, Text) in einer Tabelle stehen. Aber leider will das Teil nicht laufen - Sprich: Die Ordnungsfunktion stimmt nicht :(

PHP:
<?php
  /* global.php */
  
  /* inkludiere die notwendigen dateien */
  require('smarty/Smarty.class.php');
  require('config.php');
  require('init.php');
  require('menu.php');
  
  /* 
    init function load text
    used for load txt from db and do
    this in html
  */
  function loadtxt($name)
  {
    /* search for sid */
    $result = dosql("SELECT `pageid`, `name` FROM `cms_page` WHERE `name` = '%s';", $name);
    $data = mysql_fetch_object($result);
    /* parent 1 */
    $return = '';
    return getparents(0, TRUE, $data->pageid);
  }
  
  /* 
    getparrents( value_id ) can return you
    the content of a page or a value
  */
  function getparents($id, $first_during = FALSE, $pageid)
  {
    global $return;
    if($first_during AND $pageid != "")
    {
      $result = dosql("SELECT `value`, `type`, `id` FROM `values` WHERE `pageid` = %d ORDER BY `order`;", $pageid);
    } else
    {
      $result = dosql("SELECT `value`, `type`, `id` FROM `values` WHERE `parent` = %d AND `pageid` = %d ORDER BY `order`;",  $id, $pageid);
    }
    //unset($pageid);
    //unset($id);
    while($data = mysql_fetch_object($result))
    {
      switch($data->type)
      {
        case "h1": $return .= "<h1>".$data->value."</h1>"; break;
        case "h2": $return .= "<h2>".$data->value."</h2>"; break;
        case "h3": $return .= "<h3>".$data->value."</h3>"; break;
        case "text": $return .= $data->value; break;
        default: $return .= "<div class=\"".$data->type."\">".$data->value."</div>"; break;
      }
      getparents($data->id, FALSE, 0);
    }
    return $return;
  }
  
  /*
    dosql( sql_code ) do a sql command
  */
  function dosql($queryformat)
  {
    $queryargs=func_get_args();

    $vars=array();
    for($i=1;$i<count($queryargs);$i++)
        $vars[]=mysql_real_escape_string($queryargs[$i]);

    $querystring=vsprintf($queryformat,$vars);
    return(is_resource($res=mysql_query($querystring))?$res:pageerror("mysql", mysql_error()));
  } 
  
  /*
    pageerror( type , value ) break a page and send a error
  */
  function pageerror($type = "na", $value)
  {
    print "<h1>Fehler entdeckt</h1>";
    print "Server sandte folgenden Fehlermodus: ".$type."<br />";
    print "Fehler wurde generiert um ".date("H:i:s \a\m d.m.Y", time())."<br />";
    print "Request hiess folgendermassen: <code>".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']."</code><br />";
    print "<br />Fehlercode lautet:<br /><code>".$value."</code>";
    exit;die;
  }
  

?>
 
stimmt das ??
PHP:
ORDER BY `order`
hast du wirklich so eine Spalte? Oder habe ich was falsch verstanden und du meinst du Switch?

*edit
Wie soll es denn geordnet sein, und was bekommst du jetzt?
 
Gelöst, aber weiss nicht wie... ne', habe darauf geachtet, dass er die, ohne Parent, holt.
PHP:
<?php
  /* global.php */
  
  /* inkludiere die notwendigen dateien */
  require('smarty/Smarty.class.php');
  require('config.php');
  require('init.php');
  require('menu.php');
  
  /* 
    init function load text
    used for load txt from db and do
    this in html
  */
  function loadtxt($name)
  {
    /* search for sid */
    $result = dosql("SELECT `pageid`, `name` FROM `cms_page` WHERE `name` = '%s';", $name);
    $data = mysql_fetch_object($result);
    /* parent 1 */
    $return = '';
    return getparents(0, TRUE, $data->pageid);
  }
  
  /* 
    getparrents( value_id ) can return you
    the content of a page or a value
  */
  function getparents($id, $first_during = FALSE, $pageid)
  {
    global $return;
    if($first_during)
    {
      $result = dosql("SELECT `value`, `type`, `id` FROM `values` WHERE `pageid` = %d AND `parent` = 0 ORDER BY `order` ASC;", $pageid);
    } else
    {
      $result = dosql("SELECT `value`, `type`, `id` FROM `values` WHERE `parent` = %d AND `pageid` = %d ORDER BY `order` ASC;",  $id, $pageid);
    }
    //unset($pageid);
    //unset($id);
    while($data = mysql_fetch_object($result))
    {
      switch($data->type)
      {
        case "h1": $return .= "<h1>".$data->value."</h1>"; break;
        case "h2": $return .= "<h2>".$data->value."</h2>"; break;
        case "h3": $return .= "<h3>".$data->value."</h3>"; break;
        case "text": $return .= $data->value; break;
        default: $return .= "<div class=\"".$data->type."\">".$data->value."</div>"; break;
      }
      getparents($data->id, FALSE, $pageid);
    }
    return $return;
  }
  
  /*
    dosql( sql_code ) do a sql command
  */
  function dosql($queryformat)
  {
    $queryargs=func_get_args();

    $vars=array();
    for($i=1;$i<count($queryargs);$i++)
        $vars[]=mysql_real_escape_string($queryargs[$i]);

    $querystring=vsprintf($queryformat,$vars);
    return(is_resource($res=mysql_query($querystring))?$res:pageerror("mysql", mysql_error()));
  } 
  
  /*
    pageerror( type , value ) break a page and send a error
  */
  function pageerror($type = "na", $value)
  {
    print "<h1>Fehler entdeckt</h1>";
    print "Server sandte folgenden Fehlermodus: ".$type."<br />";
    print "Fehler wurde generiert um ".date("H:i:s \a\m d.m.Y", time())."<br />";
    print "Request hiess folgendermassen: <code>".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']."</code><br />";
    print "<br />Fehlercode lautet:<br /><code>".$value."</code>";
    exit;die;
  }
  
  
   
  
  
?>