Hallo,
ich habe ein PHP-Skript gebaut, welches ein paar Werte berechnet und sie in der Datenbank entsprechend aktualisiert, also updated.
Das funktioniert auch einwandfrei und ohne Probleme. Auch die Fließkommazahlen werden korrekt ausgerechnet.
Aber sobald ich es in einen Cronjob, wie diesen hier packe...
$ cat /etc/cron.d/berechnungPATH=/usr/local/bin:/usr/bin:/bin18 18 * * * web12 php /var/www/berechnung.php# ^ ^ ^ ^ ^# | | | | |# | | | | |___ Weekday (0-7, Sunday is mostly 0)# | | | |_____ Month (1-12)# | | |_______ Day (1-31)# | |_________ Hour (0-23)# |___________ Minute (0-59)
...funktioniert es nicht mehr. Es zieht z.B. anstatts 0,54 einfach so viel ab, dass am Schluss immer ein Integer Wert, also z.B. 16.00 in der Datenbank erscheint. Das Array erhält aber nach vielen Tests und beim Aufruf über eine Webseite immer die korrekten Werte...
Ich hatte mir mal eine Ausgabe der Arrays, die zu aktualisieren sind, per Mail zukommen lassen, da ich sonst ja keinen Inhalt bzw. keine Ausgabe vom Cronjob sehe:
ZitatAlles anzeigenPHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0
<pre>Array
(
[wert] => 11,92
)
</pre><pre>Array
(
[wert] => 20
)
</pre>PHP Warning: mysqli::close(): Couldn't fetch mysqli in /var/www/class/mysqli.class.php on line 49
Jetzt ist eben die Frage... Warum erhalte ich hier im Array ein Komma im Wert und überall anders nicht? Das muss für Datenbank nämlich ein Punkt sein...
Wenn ich es auf der Shell oder im Browser aufrufe, gibt er mir das Array korrekt zurück:
ZitatAlles anzeigen$ php berechnung.php
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0
<pre>Array
(
[wert] => 9.92
)
</pre><pre>Array
(
[wert] => 20
)
</pre>PHP Warning: mysqli::close(): Couldn't fetch mysqli in /var/www/class/mysqli.class.php on line 49
Um es aktuell überhaupt mal zum Laufen zu kriegen, ersetze ich in den Arrays jetzt einfach alle Komma-Zeichen durch einen Punkt:
Die mysqli.class.php sieht wie folgt aus:
<?PHP
/**
* Funktionen für die MySQLi Verbindung
* @author par0noid
* @package MySQLi
* @copyright Since 2014 by par0noid aka Stefan Z.
* @link https://par0noid.info/
*/
class SQLCommander {
/**
* Socket/Datenbankverbindung zurück setzen
* @author par0noid
* @package MySQLi
*/
private $sock = null;
/**
* Verbindung zur Datenbank aufbauen
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->__construct('host', 'username', 'password', 'database', 'db_port');
* </code>
* @return string database link or error
*/
public function __construct($host = 'localhost', $username = 'user', $password = 'verySecret$Password!2014', $database = 'dbExample', $port = 3306) {
$this->sock = new mysqli($host, $username, $password, $database, $port);
if ($this->sock->connect_errno) {
$this->sock = null;
}
}
/**
* Verbindung der Datenbank schließen
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->__destruct();
* </code>
* @return boolean true or false
*/
public function __destruct() {
$this->sock->close();
}
/**
* Setzt den Zeichensatz der MySQLi Verbindung
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->charset("utf8");
* </code>
* @return boolean true or false
*/
public function charset($cs = 'utf8') {
//Charsets: http://dev.mysql.com/doc/refman/5.6/en/charset-charsets.html
if (!$this->sock->set_charset($cs)) {
return false;
} else {
return true;
}
}
/**
* Liefert einen SELECT Datensatz aus der Datenbank
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->fetch("SELECT id,Name FROM tblExample WHERE id='1'");
* </code>
* @return array data record
*/
public function fetch($query) {
if($this->sock != null) {
$result = $this->execQuery($query);
$row = $result->fetch_assoc();
$result->free_result();
return $row;
}else{
return false;
}
}
/**
* Liefert alle SELECT Datensätze aus der Datenbank
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->fetchAll("SELECT id,Name FROM tblExample");
* </code>
* @return array all data records
*/
public function fetchAll($query) {
if($this->sock != null) {
$result = $this->sock->query($query);
$data = array();
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
$result->free_result();
return $data;
}else{
return false;
}
}
/**
* Gibt die Anzahl der gefunden SELECT Datensätze zurück
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->num("SELECT COUNT(id) FROM tblExample");
* </code>
* @return integer count of rows or false
*/
public function num($query) {
if($this->sock != null) {
$result = $this->execQuery($query);
return $result->num_rows;
}else{
return false;
}
}
/**
* Speichert einen Datensatz in der Datenbank
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->insert("tblExample", "$array_with_data");
* </code>
* @return boolean true or false
*/
public function insert($table, $data) {
if($this->sock != null) {
$keys = array();
$values = array();
foreach($data as $key => $value) {
$keys[] = '`'.$this->escape($key).'`';
$values[] = "'".$this->escape($value)."'";
}
return $this->query("INSERT INTO `".$this->escape($table)."` (".implode(", ", $keys).") VALUES (".implode(", ", $values).")");
}else{
return false;
}
}
/**
* Aktualisiert einen oder mehrere Datensätze
* @author Sebbo
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->update("tblExample", "$array_with_data");
* </code>
* @return boolean true or false
*/
public function update($table, $data, $where = '') {
if($this->sock != null) {
$updates = array();
foreach($data as $key => $value) {
$updates[] = "`".$this->escape($key)."` = '".$this->escape($value)."'";
}
return $this->query("UPDATE `".$this->escape($table)."` SET ".implode(", ", $updates).($where != '' ? ' WHERE '.$where : ''));
}else{
return false;
}
}
/**
* Löscht einen oder mehrere Datensätze
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->delete("tblExample", "id=1");
* </code>
* @return boolean true or false
*/
public function delete($table, $where = '') {
if($this->sock != null) {
return $this->query("DELETE FROM `".$this->escape($table)."` ".($where != '' ? 'WHERE '.$where : ''));
}else{
return false;
}
}
/**
* Gibt die Anzahl der berührten Datensätze zurück
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->query("SELECT Name FROM tblExample");
* </code>
* @return integer count of touched rows or false
*/
public function query($query) {
if($this->sock != null) {
$result = $this->execQuery($query);
$num = mysqli_affected_rows($this->sock);
return $num;
}else{
return false;
}
}
/**
* Escapet spezielle Zeichen eines Querys
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->escape("INSERT INTO tblExample (Name) VALUES ('Max-Peter Mustermann')");
* </code>
* @return boolean true or false
*/
public function escape($input) {
if($this->sock != null) {
return $this->sock->real_escape_string($input);
}else{
return false;
}
}
/**
* Führt einen beliebigen Query aus
* @author par0noid
* @package MySQLi
* @example
* <code>
* $SQLCommander = new SQLCommander();
* $SQLCommander->execQuery("SELECT Name FROM tblExample");
* </code>
* @return array result of query
*/
private function execQuery($query) {
return $this->sock->query($query);
}
}
?>
Alles anzeigen