mysqliW = new mysqli_strict($main['host'], $main['user'], $main['pass'], $main['name'], $main['port']); if ($slave && is_array($slave) && isset($slave['enabled']) && $slave['enabled'] === true) { $this->mysqliR = new mysqli_strict($slave['host'], $slave['user'], $slave['pass'], $slave['name'], $slave['port']); $this->slave = true; } } else { $this->mysqliW = new mysqli($main['host'], $main['user'], $main['pass'], $main['name'], $main['port']); if ($slave && is_array($slave) && isset($slave['enabled']) && $slave['enabled'] === true) { $this->mysqliR = new mysqli($slave['host'], $slave['user'], $slave['pass'], $slave['name'], $slave['port']); $this->slave = true; } } if ($this->mysqliW->connect_errno) { throw new Exception("Failed to connect to MySQL: (".$this->mysqliW->connect_errno.") ".$this->mysqliW->connect_error); } if ($this->mysqliR->connect_errno && $this->slave === true) { throw new Exception("Failed to connect to MySQL: (".$this->mysqliR->connect_errno.") ".$this->mysqliR->connect_error); } } /* * Override standard mysqli_prepare to select master/slave server * @param $string query * * @return mysqli_stmt */ public function prepare($query) { if (stripos($query, "SELECT") && stripos($query, "FOR UPDATE") === false && $this->mysqliR !== null) { return $this->mysqliR->prepare($query); } else { return $this->mysqliW->prepare($query); } } /* * Override standard mysqli_query to select master/slave server * @param string $query * @param int $resultmode * * @return boolean * @return mixed */ public function query($query, $resultmode = MYSQLI_STORE_RESULT) { if (stripos($query, "SELECT") && stripos($query, "FOR UPDATE") === false && $this->mysqliR !== null) {/* Use readonly server */ return $this->mysqliR->query($query, $resultmode); } else { return $this->mysqliW->query($query, $resultmode); } } }