Bei der Bearbeitung eines Nodes treten Syntax error und invalid arguments auf.
am 09.12.2008 - 06:00 Uhr in
Wenn ein node ge"edit" wird treten folgende 6 Fehlermeldung auf:
2 x A)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 query: SELECT n.nid, n.vid, n.type, n.status, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM node n INNER JOIN users u ON u.uid = n.uid INNER JOIN node_revisions r ON r.vid = n.vid WHERE in /includes/database.mysql.inc in Zeile 174.
2x B)
implode() [function.implode]: Invalid arguments passed in /sites/all/modules/customized/node/node.module in Zeile 536.
2x C)
Invalid argument supplied for foreach() in /sites/all/modules/customized/node/node.module in Zeile 532.
Details:
Zu A) database.mysql.inc in Zeile 174
/**
* Fetch one result row from the previous query as an object.
*
* @param $result
* A database query result resource, as returned from db_query().
* @return
* An object representing the next row of the result. The attributes of this
* object are the table fields selected by the query.
*/
function db_fetch_object($result) {
if ($result) {
return mysqli_fetch_object($result);
}
} <= Zeile 174Zu B) und C) node.module
/**
* Load a node object from the database.
*
* @param $param
* Either the nid of the node or an array of conditions to match against in the database query
* @param $revision
* Which numbered revision to load. Defaults to the current version.
* @param $reset
* Whether to reset the internal node_load cache.
*
* @return
* A fully-populated node object.
*/
function node_load($param = array(), $revision = NULL, $reset = NULL) {
static $nodes = array();
if ($reset) {
$nodes = array();
}
if ($param == NULL) {
return NULL;
}
$cachable = ($revision == NULL);
$arguments = array();
if (is_numeric($param)) {
if ($cachable && isset($nodes[$param])) {
return is_object($nodes[$param]) ? drupal_clone($nodes[$param]) : $nodes[$param];
}
$cond = 'n.nid = %d';
$arguments[] = $param;
}
else {
// Turn the conditions into a query.
foreach ($param as $key => $value) { <= C) ZEILE 532
$cond[] = 'n.'. db_escape_string($key) ." = '%s'";
$arguments[] = $value;
}
$cond = implode(' AND ', $cond); <= B) ZEILE 536
}Wie löse ich das Problem?
Dank im Voraus für die Hilfe.
Saludos,
Schnittmenge
- Anmelden oder Registrieren um Kommentare zu schreiben

Schau mal nach, was in
am 09.12.2008 - 08:21 Uhr
Schau mal nach, was in
function node_load($param = array(), $revision = NULL, $reset = NULL)in $param steht.Da ist was faul und das
$cond = implode(' AND ', $cond);ein Folgefehler.Wenn Du rausbekommen musst von wo die
function node_loadaufgerufen wird, dann mach ein var_dump(debug_backtrace()); (oder print_r()) um die aufrufende Funktion rauszubekommen. So hangelst Du Dich hoch.Danke
am 09.12.2008 - 13:05 Uhr
Dank Deiner Hilfe und der Hilfe von stBorchert konnte ich ein node_load ohne Inhalt entdecken und beheben.
Gleicher Fehler, aber
am 12.12.2008 - 16:04 Uhr
Hallo,
ich habe auf meiner Site www.funkystory.de die gleiche Fehlermeldung, muss aber gestehen, dass ich diese Lösung hier nicht verstehe.
Kann es also jemand einfacher erklären?
Vielen Dank und Grüße.
dann sucht man sich garantiert tot
am 12.12.2008 - 16:29 Uhr
Den Fehlern in der "database.mysql.inc" und "node.module" ist relativ sinnlos.
Ale 1.: Drupal und alle Module auf den aktuellen Stand bringen.
2.
Dem node_load() nachgehen. D. heisst, wenn diese Funktion durch eigene Code aufgerufen wird dann muss man in diesem Code sicherstellen das node_load nur dann aufgerufen wird wenn fuer diese Funktion ein Argument verfuegbar ist. In der Regel wird dieses Argument die Node ID sein.
Aus diesem Grund wird einem Funktionsaufruf von node_load() im Zusammenhang mit einer URL sinvoller Weise eine Pruefung der URL vorangestellt.:
<?phpif (arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
$my_node = node_load(arg(1));
}
?>
- Als praktikabel erweist sich bei der URL-Pruefung auch
!arg(2)zu verwenden. Macht man dies nicht wird node_load() auch bei einer URL nach dem Schema /node/x/edit aufgerufen. Was zwar keinen Fehler verursachen wuerde aber zu unerwuenschten Effekten fuehren koennte.- Als praktikabel erweist sich dabei, nicht
$node = node_load(arg(1))zu verwenden. Das kann unter bestimmten Umstaenden/Konstellationen zur Folge haben das man sich das existierende "normale" Nodeobject $node mit dem node_load() ueberschreibt. Und wenn dies mal der Fall sein sollte dann sucht man sich nach der Ursache des dadurch entstehenden Problemes garantiert tot.3.
Wird der node_load() eventuell im Zusammenhang mit einer CCK Feldkonfiguration initiiert? Existierende CCK Nodetype-Konfigurationen pruefen.
4.
Wird der node_load() eventuell im Zusammenhang mit einem View initiert? Existierende Views pruefen die mit dem Code in Verbindung stehen der bei der Fehleranzeige ausgegeben wird.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.