SQL Querry aus externer Datenbank

Hallo Community,

ich benötige mit einem Shopware Plugin Zugriff auf eine andere Datenbank. Im Plugin habe ich folgendes
 

$db = new mysqli("localhost", "sqldb", "sqlpw", "sqldb");
if ($db->connect_errno) {
 die("Verbindung fehlgeschlagen: " . $db->connect_error);
}
$sql="SELECT 'filename' FROM 'Files';";
$filelist = $db->query($sql);
$view->assign("filelist",$filelist);

wenn ich nun mit Symfony die Smartyvariable $filelist suche, steht als Wert nur „false“

was mach ich Falsch?

Gruß Schlueter550v

Hallo, ich hab die Query mal geändert:

$sql="SELECT * FROM Files";

jetzt bekomme ich in Symfony folgende Ausgabe:

"filelist" => "[object] (mysqli_result: {"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null})"

 

Hallo @schlueter550v‍,

der Aufruf von „mysqli_query()“ gibt dir ein sogenanntes MySQLi Result Objekt zurück.
Auf diesem Result Objekt musst du jetzt nochmal eine Methode aufrufen, um deine Ergebnisse herauszubekommen.
Dabei hast du bspw. so Möglichkeiten wie „fetch_all“, „fetch_field“ oder „fetch_assoc“ - alle Details dazu findest du in dem o.g. Link.

Da du ein SELECT *  ausführst, wirst du ein „fetch_all“ benötigen.
Damit das Ergebnis auch so benannt ist, wie die Spalten in deiner Datenbank, wird dort als Parameter noch ein „MYSQLI_ASSOC“ angewendet.

$mySqliResult = mysqli_query($sql);
$fileList = $mySqliResult->fetch_all(MYSQLI_ASSOC);

Hilft dir dies weiter?

Gruß,
Patrick  Shopware

 

Bist du sicher, dass in der Datenbank auch etwas steht?

Ansonsten vielleicht mal so versuchen:

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

$res = $db->query('SELECT * FROM `Files`', PDO::FETCH_ASSOC);

//danach entweder
$view->assign("fieldlist",count($res));
//oder sowas wie
$view->assign("fieldlist",print_r($res,true));

In der tpl sollte dann für {$filelist} entweder die Anzahl der Treffer, oder das Ergebnis der Suche stehen…

Ist das nach wie vor nicht der Fall, versuche doch mal die letzte SQL-Fehlermeldung auszugeben, das wäre dann sowas wie $dbh->errorInfo()  denke ich.

Zum Nachschlagen: http://php.net/manual/de/book.pdo.php

Hallo,

danke für eure Tipps, der von Patrick hat mir sehr weitergeholfen. Er wirft nun zumindest schon mal was aus. Nur leider irgendetwas Wirres.
Der Smarty Block sieht so aus:

{block name='frontend_index_content'}
testaus dem Theme Variable {$currentcontroller}
	
		{foreach from=$filelist item=filearray}
			{foreach from=$filearray item=file}
				{$file.filename}
			{/foreach}
		{/foreach}
	
{/block}

Als Ausgabe erhalte ich sowas:

  • m
  • .
  • m
  •  
  • 0
  • m
  • S
  • 0
  • m
  • S
  • 0
  • m
  • D
  • 0
  • m
  • D
  • 0
  • m
  • S
  • 0
  • m
  • D
  • 0
  • m
  • D
  • 0
  • m
  • S
  • 0
  • m
  • D

Das sind immer die Anfangsbuchstaben der Zellen??

Filearray ist die Reihe, File das Feld. Probier’s mal nur mit {$file}

Aber es ist doch ein Doppelter Array.
$filelist ist das SQL-Ergebniss mit in meinem Fall 13000 Einträgen. Somit ist doch $filearray, ein einzelnes Element. $file ist doch dann das Array mit meinen SQL Spalten.

Wenn du es so gebaut hast, wie oben beschrieben, dann ist $filelist dein SQL-Ergebnis, $filearray demnach eine Zeile aus diesem Ergebnis und $file entspricht einem Wert der Zeile. Hast du’s mal probiert?