Attribute aus Oxid per marmcsvexporter in eine CSV

Also Warnings können eigentlich ignoriert werden, das sind nur Hinweise.

Wenn du allen mysqli_query Funktionen noch als zweiten Parameter MYSQLI_STORE_RESULT übergibst, gibt es keine Warnings mehr - Außer evt die letzte Invalid argument supplied for foreach()

Hat der Export denn funktioniert wie gewünscht?

EDIT In Zeile 607 wird eine Variable auf NULL gesetzt, richtig wäre aber = array();

  • eine Export-Datei wird angelegt - allerdings ist die mit 163 Byte bis auf die Tabellenüberschriften “ID~Titel~Beschreibung~Google Produktkategorie~Produkttyp~Link~Bildlink~Zustand~Verfügbarkeit~Preis~Marke~GTIN~MPN~Versand~Grundpreis Maß~Grundpreis Einheitsmaß” leer

  • die Befehle “$rs = mysqli_query($query);” in den Zeilen 38, 463, 617, 723, 743 und 801 erzeugen jeweils " Warning : mysqli_query() expects at least 2 parameters, 1 given"

  • warum soll die Zeile 607 ($parentProducts = null;) geändert werden - die wird doch nicht bemängelt?

Die Warnung sollte man nicht ignorieren!
Der erste Parameter muss ein von mysqli_connect() oder mysqli_init() zurückgegebenes Verbindungsobjekt sein → da nicht vorhanden liefern die queries auch nichts

Zeile 607 weil in Zeile 92 wird ein Array erwartet. Die Funktion gibt aber NULL zurück wenn kein Vaterartikel drin ist. Das erzeugt den Fehler:

Warning : Invalid argument supplied for foreach() in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 92

expects at least 2 parameters, 1 given

Das bedeutet nur dass der zweite Parameter MYSQLI_STORE_RESULT fehlt.

Du kannst ja mal mit print_r() ausgeben was in $rs jeweils drin steht und ob das noch brauchbar ist. Mysqli ist die objektorientierte Variante von Mysql und gibt evt. ein Objekt statt einem Array zurück. Mit (array) $Object kann ein Object wieder in ein Array umgewandelt werden.

Ich rate dir das Script mit einer htaccess zu schützen, weil der Code schon etwas in die Jahre gekommen ist.

so, Zeile 607 hab ich geändert in “$parentProducts = array();” - nun kommen noch folgende Meldungen:

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 38

Export gestartet!

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 801

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 463

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 723

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 743

Warning : mysqli_query() expects at least 2 parameters, 1 given in /xxx/source/modules/marm/csvexporter/core/marmCsvExporter.php on line 617

Export beendet!

Wie du die beheben kannst, hab ich ja bereits geschrieben. Jetzt musst du nur noch herausfinden, warum der Export leer bleibt.

wie genau füge ich denn den zweiten Parameter MYSQLI_STORE_RESULT ein?

Beispiel: mysqli_query("SET NAMES 'utf8'", MYSQLI_STORE_RESULT);

MYSQLI_STORE_RESULT wär der dritte Parameter für mysqli_query. Mirko benötigt, wie patchwork.de bereits geschrieben hat, das MySQLi Verbindungsobjekt.

PHP: mysqli::query - Manual [Prozeduraler Stil]

wenn ich das Beispiel von Sioweb nutzen bekomme ich statt der alten Fehlermeldung (mysqli_query() expects at least 2 parameters) jetzt: mysqli_query() expects parameter 1 to be mysqli

wenn er erste Parameter muss ein von mysqli_connect() oder mysqli_init() zurückgegebenes Verbindungsobjekt sein muss: wie realisiere ich das?
statt “mysqli_query(“SET NAMES ‘utf8’”);” bzw. “$rs = mysqli_query($query);” muss ich dann was reinschreiben?

Sorry mein Beispiel war falsch, ich hab die Doku falsch gelesen :slight_smile:

Oben in Zeile 33 wird ja der Mysqli-Link erzeugt.

Das heißt du müsstest es nun an ein paar stellen abpassen:

In Zeile 21 diese Zeile hinzufügen, damit der Link überall verfügbar ist:

private $db_connection = null;

Zeile 33 & 34 $db_connection in $this->db_connection umbenennen

Bei jedem mysqli_query $this->db_connection eintragen

mysqli_query($this->db_connection, "SET NAMES 'utf8'");

das habe ich jetzt alles so umgesetzt - die Fehlermeldungen sind weg - es kommt nur noch auf dem Bildschirm"Export gestartet! Export beendet!". soweit - so gut

  • es wird auch eine Export-Datei angelegt - allerdings ist die mit 163 Byte bis auf die Tabellenüberschriften “ID~Titel~Beschreibung~Google Produktkategorie~Produkttyp~Link~Bildlink~Zustand~Verfügbarkeit~Preis~Marke~GTIN~MPN~Versand~Grundpreis Maß~Grundpreis Einheitsmaß” leer

Kannst du die Datei bitte mal auf Pastebin kopieren? https://pastebin.com/

aber gern:
marmCsvExporter.php : https://pastebin.com/EtCJTmEi
marmGoogleExporter.php : https://pastebin.com/XEmKvEfC

Da sind noch ein paar mysqli_query Befehle ohne $this->db_connection, Zeile 367, 529, 551, …

  • sorry - ich hatte nur die Zeilen 38, 463, 617, 723, 743 und 801 geändert die vorher die warnings erzeugten.

  • nun habe ich alle Zeilen mit “$this->db_connection” erweitert - trotzdem erfolgt keine Ausgabe von Daten in das File

  • aktuelle Datei hier: https://pastebin.com/fp3BWw9b

mysqli_select_db() erwartet als ERSTEN Parameter das Verbindungsobjekt
https://www.php.net/manual/de/mysqli.select-db.php

1 Like

ich habe Zeile 34 nun geändert

  • von @mysqli_select_db($this->dbName, $this->db_connection);
  • in @mysqli_select_db($this->db_connection, $this->dbName);

und siehe da - es klappt! Danke allerseits!

1 Like

weiß jemand woher der marmGoogleExporter.php die Daten für das Feld “Google Produktkategorie/google_categoryPath” holt? Bei mir bleibt nach Ausführung der PHP-Datei diese Spalte leider leer…

getGoogleCategoryPath()

allerdings nur, wenn

$this->googleCategoriesTitle (scheint aus cacheGoogleCategoriesTitles() zu kommen)

nicht leer ist, sonst return “”;