From: Michael Vogel <ike@pirati.ca>
Date: Thu, 1 Sep 2016 03:50:41 +0000 (+0000)
Subject: Set the charset for the SQL connection for new installations
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=9209d88c4a050dc16b9f147bbfe79dc8222694bf;p=friendica.git

Set the charset for the SQL connection for new installations
---

diff --git a/htconfig.php b/htconfig.php
index fe6c0d82ee..469fa7af61 100644
--- a/htconfig.php
+++ b/htconfig.php
@@ -16,6 +16,11 @@ $db_user = 'mysqlusername';
 $db_pass = 'mysqlpassword';
 $db_data = 'mysqldatabasename';
 
+// Set the database connection charset to UTF8.
+// Changing this value will likely corrupt the special characters.
+// You have been warned.
+$a->config['system']['db_charset'] = "utf8mb4";
+
 // Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
 // It can be changed later and only applies to timestamps for anonymous viewers.
 
diff --git a/include/dba.php b/include/dba.php
index b0927265be..5e84b95df5 100644
--- a/include/dba.php
+++ b/include/dba.php
@@ -66,6 +66,8 @@ class dba {
 			if(! mysqli_connect_errno()) {
 				$this->connected = true;
 			}
+			if (isset($a->config["system"]["db_charset"]))
+				$this->db->set_charset($a->config["system"]["db_charset"]);
 		}
 		else {
 			$this->mysqli = false;
@@ -73,6 +75,8 @@ class dba {
 			if($this->db && mysql_select_db($db,$this->db)) {
 				$this->connected = true;
 			}
+			if (isset($a->config["system"]["db_charset"]))
+				mysql_set_charset($a->config["system"]["db_charset"], $this->db);
 		}
 		if(! $this->connected) {
 			$this->db = null;
@@ -95,6 +99,14 @@ class dba {
 
 		$this->error = '';
 
+		// Check the connection (This can reconnect the connection - if configured)
+		if ($this->mysqli)
+			$connected = $this->db->ping();
+		else
+			$connected = mysql_ping($this->db);
+
+		$connstr = ($connected ? "Connected": "Disonnected");
+
 		$stamp1 = microtime(true);
 
 		if($this->mysqli)
@@ -122,14 +134,17 @@ class dba {
 		}
 
 		if($this->mysqli) {
-			if($this->db->errno)
+			if($this->db->errno) {
 				$this->error = $this->db->error;
+				$this->errorno = $this->db->errno;
+			}
+		} elseif(mysql_errno($this->db)) {
+			$this->error = mysql_error($this->db);
+			$this->errorno = mysql_errno($this->db);
 		}
-		elseif(mysql_errno($this->db))
-				$this->error = mysql_error($this->db);
 
 		if(strlen($this->error)) {
-			logger('dba: ' . $this->error);
+			logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error);
 		}
 
 		if($this->debug) {
diff --git a/view/templates/htconfig.tpl b/view/templates/htconfig.tpl
index cbbd14dc4e..df793197ce 100644
--- a/view/templates/htconfig.tpl
+++ b/view/templates/htconfig.tpl
@@ -15,6 +15,11 @@ $db_user = '{{$dbuser}}';
 $db_pass = '{{$dbpass}}';
 $db_data = '{{$dbdata}}';
 
+// Set the database connection charset to UTF8.
+// Changing this value will likely corrupt the special characters.
+// You have been warned.
+$a->config['system']['db_charset'] = "utf8mb4";
+
 // email adress for the system admin
 
 $a->config['admin_email'] = '{{$adminmail}}';