Ich finde viele Beiträge, die nahe daran sind, aber keine sind gleich. Ich habe eine stark genutzte CodeIgniter-App, bei der möglicherweise ein paar Dutzend völlig zufällige, schwerwiegende Fehler im Fehlerprotokoll pro Tag protokolliert wurden.CodeIgniter Random PHP Schwerwiegender Fehler: Aufruf an eine Member-Funktion ... auf einem Nicht-Objekt in ... mysqli_driver.php
PHP Fatal error: Call to a member function real_escape_string() on a non-object in /system/database/drivers/mysqli/mysqli_driver.php
oder
PHP Fatal error: Call to a member function query() on a non-object in /system/database/drivers/mysqli/mysqli_driver.php
Die Mitgliedsfunktion ist zufällig. Row(), Query(), real_escape_string(), num_rows() usw.
I eine Protokollfunktion mysqli_driver.php hinzugefügt, die einen Stapel trace Dumps, wann immer es einen Nicht-Objekt empfängt:
if(!is_object($this->conn_id))
// Dump stack
Das sagt mir, dass der Fehler an zufälligen Orten in meiner App passiert, so nehme ich an, dass das Problem nicht in meinem Code ist. Das lässt meine Serverkonfiguration als den Verdächtigen. Ich kann keine rauchenden Waffen finden und kann den Fehler nicht reproduzieren.
Ich fasse hier Strohhalme. Kann mir irgendjemand Ideen geben, was ich noch tun kann, um das zu verfolgen?
- CodeIgniter v3.x
- Apache/2.2.15
- CentOS 6
- MySQL 5.1.73
UPDATE: Hier sind die configs ich verwende. Haupt DB-Verbindung:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'cfMaster',
'password' => 'somemasterpw',
'database' => 'cfMaster',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => FALSE
);
Wenn an einem anderen DB verbinden:
// $userDb array contains all of the connection details.
$firmDb = array("firm_id" => $userDb[0]->firm_id,
"hostname" => $userDb[0]->hostname,
"username" => $userDb[0]->username,
"password" => $userDb[0]->password,
"database" => $userDb[0]->database,
"dbdriver" => "mysqli",
"pconnect" => FALSE);
$this->db = $this->load->database($firmDb, TRUE, TRUE);
~ 35K-Verbindungen pro Stunde. ~ 20 Fehler pro Tag. Alle meine Datenbankverbindungen funktionieren buchstäblich 99,99% der Zeit. Der Fehler von 0,01% ist mein Problem.
Dies kann entweder auf Ihrem MySQL-Server oder Ihre codeigniter Datenbank-Konfiguration zusammenhängen. Können Sie uns Ihre CI-Konfiguration für die Datenbank zeigen? Sie können den Hostnamen, den Benutzernamen und das Passwort ändern, wenn Sie möchten. –
Dies ist ein sehr großes, stark genutztes System mit mehreren Datenbankkonfigurationen. Im Durchschnitt werden pro Stunde etwa 35.000 Verbindungen zur DB hergestellt. Da ich nur 20 Fehler pro Tag bekomme, gehe ich davon aus, dass meine Konfigurationen in Ordnung sind. Jetzt meine Konfigurationen zur Frage hinzufügen ... –
Haben Sie einen Grund dafür gefunden? Ich habe das gleiche Problem. –