Der pdo_oci-Treiber wurde nicht gefunden, ist aber unter den verfügbaren Treibern aufgeführt

StackOverflow https://stackoverflow.com//questions/25063546

  •  22-12-2019
  •  | 
  •  

Frage

Ich versuche, über PDO_OCI in PHP eine Verbindung zu einer Oracle Database 11g XE herzustellen, die unter Windows von einem Remote-Ubuntu 14.04-Server ausgeführt wird.Ich bin dieser Anleitung gefolgt http://gist.github.com/tassoevan/10392954 (mehrere Male) und erhalte immer wieder die folgende Fehlermeldung:

Treiber konnte nicht gefunden werden

Wenn ich jedoch PDO::getAvailableDrivers() aufrufe, erhalte ich Folgendes:

Array ( [0] => mysql [1] => oci [2] => sqlite )

Notiz:oci war noch nicht da, bevor ich der Anleitung im obigen Link gefolgt bin.

Alle anderen Tutorials, die ich finden konnte, waren im Grunde das Gleiche.

Ich habe den Oracle Instant Client installiert (Version 11.1).In der neuesten Version wurde der Treiber nicht einmal in der Liste der verfügbaren Treiber angezeigt.

Ich weiß auch, dass der bei dieser Methode verwendete Treiber älter ist, aber es gibt keine Schritt-für-Schritt-Anleitungen, wie man ihn mit der neuesten Version zum Laufen bringt.Ich bin neu in Oracle-Datenbanken und PHP, daher wäre ich für Schritt-für-Schritt-Hilfe sehr dankbar.

AKTUALISIEREN:Ich habe das Treiberproblem herausgefunden.Es war in meinem PHP-Code und etwas sehr Dummes.Ich poste zum Nutzen anderer.

Mein ursprünglicher Code hatte beim Einrichten der Verbindung „OCI“ in Großbuchstaben.

$tns = "  
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myIP)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
    )
  )
       ";

try{
$pdo = new PDO('OCI:dbname='.$tns ,'username','password'); // Capital 'OCI' here is WRONG so changed to 'oci:dbname='
} catch(PDOException $e){
    echo $e->getMessage();
}

print_r(PDO::getAvailableDrivers());

Allerdings habe ich Probleme beim Abfragen der Datenbank.Es scheint, dass nichts passiert.Ich habe den Port 1521 in der Windows-Firewall sowohl für eingehende als auch für ausgehende Verbindungen zugelassen.Irgendein Vorschlag?

Hier ist mein PHP-Code:

$stmt = $pdo->prepare("SELECT * FROM `PDO`;");
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result;

Der Tisch PDO hat nur eine Spalte mit einer Zeile.

Muss die Oracle-Datenbank so konfiguriert werden, dass Remote-Verbindungen möglich sind?

War es hilfreich?

Lösung

Es gab zwei Probleme mit meinem PHP-Code.1) Die Art und Weise, wie die PDO-Verbindung initiiert wurde, war falsch ...siehe Update im Originalbeitrag.Das hat mein Treiberproblem gelöst.

2) Im Gegensatz zu MySQL scheint Oracle das Backtick-Zeichen nicht zu mögen.Also musste ich sie aus meiner Abfrage entfernen, damit sie so aussahen

$stmt = $pdo->prepare("SELECT * FROM PDO"); // Originally was SELECT * FROM `PDO`
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result; 

Dies hat mein Problem mit der Datenbankabfrage gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top