Als Workaround rufe ich aus den IPS-Skripten ein Perlscript auf, das für mich die MySQL-Befehle rausschickt. Für „INSERT INTO“ und „UPDATE“ funktioniert das recht gut, da ich beim Aufruf einfach den Querystring mit übergebe. Bei „SELECT“-Befehlen müsste das Perlscript dann ja auch die Ergebnisse aus der Datenbank wieder an das PHP-Script zurückliefern. Geht auch, ist dann aber etwas aufwendiger.
Aber trotzdem warte ich weiterhin sehnsüchtig auf eine saubere Lösung
Unter Windows wirft man ja einfach nur die DLL rein.
Auf dem Raspberry hat das mit dem Kompilieren, so wie ich es mir vorgestellt habe, leider nicht geklappt.
Hallo zusammen,
hier mal ein Workaround, um die MySQL- Datenbank trotzdem abfragen zu können. Ich habe dazu auf meinem BananaPI unter /home/bananapi ein Script angelegt, welches die Datenbankabfragen durchführt. Dieses Script wird dann aus IPS heraus per shell_exec aufgerufen.
PHP-Script „mysql_handler.php“ irgendwo auf dem Raspberry (bei mir unter /home/bananapi/):
<?php
$host = $argv[1];
$user = $argv[2];
$passwd = $argv[3];
// wer das Passwort nicht in der Kommandozeile dieses Scriptes mit übergeben will, kann das Passwort hier hardcodieren
// $passwd = "geheim";
$dbname = $argv[4];
$query = $argv[5];
$SQLInstanz = mysql_connect($host, $user, $passwd);
mysql_select_db($dbname);
$result = mysql_query($query) or die ("Fehler bei SQL-Abfrage $query<br>Error:" . mysql_error());
$i=0;
while ($row = mysql_fetch_row($result)) {
for($j=0;$j<count($row);$j++)
$array[$i][$j] = $row[$j];
$i++;
}
mysql_close($SQLInstanz);
$array_as_str = serialize($array);
echo $array_as_str;
?>
Script im IPS:
<?
define("HOST", "192.168.1.5", false);
define("PORT", 3306,false);
define("USER", "pluto",false); // Datenbankbenutzer
define("PASS", "geheim",false); // Passwort des Datenbankbenutzers
define("DBNAME", "meinedb",false); // zu nutzende Datenbank
// Beispiel-Abfrage:
$query = "SELECT nickname,active from ports WHERE kategorie='SENSOR' ORDER BY nummer DESC";
$result = shell_exec("/usr/bin/php /home/bananapi/mysql_handler.php ".HOST." ".USER." ".PASS." ".DBNAME." \"".$query."\" &");
$array = unserialize($result);
// Beispiel (assoziierte Indizes sind hier nicht möglich)
foreach ($array as $row) {
echo $row[0]." ".$row[1]."
";
}
?>
Ich habe die Scripte auf die Schnelle „zusammengekloppt“. Kann also gut sein, dass irgendwo noch Fehler enthalten sind, aber bei mir funktioniert es soweit.
Gruß
Peter
Ist ist sehr unwahrscheinlich, dass ich mir das Problem vor dem Release ansehen kann. Zum Release werde ich es als bekannte Einschränkung bei den Linux/RasperryPi/OSX Versionen angeben. Unter Windows kannst du weiterhin wie gewohnt MySQL nutzen.
Tut mir Leid, aber die fehlenden Features und dringende Bugs, wie die Abstürze haben hier Vorrang.
Ich würde somit fürs erste auf den o.g. Workaround setzen.
21.10.2015 09:20:07*| ScriptEngine*| Result for Event Scripts\Strom\SBFSpot\Daily Every 5 minute(s)
<br />
<b>Fatal error</b>: Call to undefined function mysql_connect() in <b>C:\IP-Symcon\scripts\33509.ips.php</b> on line <b>59</b><br />
Scheinbar lässt der 4.0 Updater die DLLs der 3.x Installation liegen, woraufhin diese natürlich nicht geladen werden konnten. Nachdem ich die mit den von dir genannten überschrieben habe läuft alles.