web-dev-qa-db-fra.com

PHP 7.0 Pilote ODBC pour Windows

J'ai mis à niveau mon PHP 5.6.30 ( https://www.apachefriends.org/de/download.html ) vers PHP 7.0 ( https://bitnami.com/ pile/wamp/installateur )

Jusqu'à présent, tout a bien fonctionné et le temps de chargement de ma page est passé de 1,2 seconde à 300 ms environ, lorsque j'utilise une base de données MySQL. Mais maintenant, j'essaie de me connecter à une base de données MSSQL avec le script simple suivant, qui fonctionnait bien avec mon ancienne installation (PHP 5.6):

<?php
    //Use the machine name and instance if multiple instances are used
    $server = 'Server-Adress';
    $user = '';
    $pass = '';
    //Define Port
    $port='Port=1433';
    $database = 'Databasename';

    $connection_string = "DRIVER={SQL Server};SERVER=$server;$port;DATABASE=$database";
    $conn = odbc_connect($connection_string,$user,$pass);
    if ($conn) {
        echo "Connection established.";
    } else{
        die("Connection could not be established.");
    }

    $sql = "SELECT * FROM st3_200 WHERE identifier = 1";

    $result = odbc_exec($conn,$sql);
    // Get Data From Result
      while ($data[] = odbc_fetch_array($result));

      // Free Result
      odbc_free_result($result);

      // Close Connection
      odbc_close($conn);

      // Show data
      print_r($data);

?>

Mais maintenant, j'ai une erreur dans mes journaux qui dit:

[Jeu 10 déc 11: 55: 26.629956 2015] [: erreur] [pid 260: tid 968] [client :: 1: 63003] PHP Erreur fatale: Erreur non capturée: Appel à undefined fonction odbc_connect () dans C:\Bitnami\wampstack-7.0.0-0\Apache2\htdocs\test\query.php: 11\nStack trace:\n # 0 {principal}\n ajouté C:\Bitnami\wampstack-7.0.0-0\Apache2\htdocs\test\query.php sur ligne 11

Tout d'abord, je pensais que mon php.ini avait une extension manquante, alors j'ai activé "extension = php_pdo_odbc.dll" 

la différence avec le php.ini de la version 5.6 est que l'extension: "extension = php_mssql.dll" est activée. Mais je ne les trouve pas dans le nouveau PHP 7.0.ini

Donc, mon intension est qu'il n'y a pas encore de pilote pour odbc et PHP 7? J'ai trouvé un pilote pour Linux ici: https://aur.archlinux.org/packages/php7- odbc/

Mais j'ai besoin de quelque chose pour mon environnement Windows.

Est-ce que quelqu'un a eu le même problème et l'a déjà résolu?

Merci et salutations Domi

3
user2077480

Jetez un oeil dans votre php.ini, la chaîne

extension=php_odbc.dll

semble manquer dans les nouvelles installations, au moins, je devais l’ajouter manuellement dans ma nouvelle installation XAMPP (7.0.1)

8
fweber

PHP7 a quelques modules désactivés par défaut qui étaient précédemment activés dans PHP5.

C'est une solution facile car l'extension doit déjà exister dans le dossier \ext\ fourni avec PHP7. Il vous suffit de modifier votre fichier php.ini pour inclure la ligne:

extension=php_odbc.dll

La ligne ci-dessus est not déjà présente et mise en commentaire; vous devez en fait l'ajouter!

PHP cherche le fichier php.ini dans C:\Windows\ mais il peut également se trouver ailleurs sur votre ordinateur. Vérifiez donc C:\Windows\ et C:\php\ ou à un autre endroit où vous avez installé PHP.

Après avoir effectué le changement, vous pouvez vérifier les résultats à partir de la ligne de commande comme suit:

C:\php\php.exe -m

ou (après avoir redémarré le serveur Web/la machine) à partir d'un fichier .phtml comme ceci:

<? phpinfo(); ?>

Cela produira une liste de modules activés qui devraient maintenant inclure odbc; sinon, vous avez peut-être modifié le mauvais fichier php.ini (continuez à chercher) ou oublié de redémarrer le serveur Web/la machine.


Conseils:

Si vous avez une installation non standard, vous pouvez utiliser un chemin absolu comme ceci:

extension=C:\php7x64\ext\php_odbc.dll
4
Tim Penner

extension = php_mssql.dll (ou extension = php_sqlsrv_56_nts.dll si vous le recevez à partir des pilotes Microsoft pour PHP), est votre problème: le pilote Microsoft SQL pour PHP 7 n'est pas encore prêt, le dernier ETA date de janvier la beta.

Il semble que la raison du retard réside dans l'intention d'inclure SQL 2016 dans ce pilote afin que vous puissiez migrer plus facilement à l'avenir.

MISE À JOUR (12/02/2016):

Comme indiqué par ici (réponse de meet-bhagdev), un "aperçu technique préliminaire" du pilote PHP sqlsrv pour Windows est disponible sur github .

3
Adrian B

Ouvrez votre fichier php.ini et supprimez les commentaires ou ajoutez les lignes suivantes:

extension_dir = "C:\PHP\ext"  ;<- your PHP path
extension=php_pdo_odbc.dll
extension=php_odbc.dll

Réinitialiser Internet Information Services: 

iisreset

Cela a résolu le problème pour moi.

2
Jhollman Cutcsa

En plus de Adrian B`s qui mentionne le pilote officiel, vous pouvez également vérifier https://github.com/thomsonreuters/msphpsql Ceci est un portage non officiel. Cependant, il y a des limites pour le moment.

  1. Prend en charge uniquement sqlsrv ODBC mais pas PDO
  2. Ne supporte pas ZTS, seulement NTS
  3. Prend en charge uniquement x86
  4. Il supporte un sous-ensemble de fonctions ODBC, vous pouvez voir la liste sur la page.
1
Akin Ocal

Nous avons besoin du pilote x86 de Microsoft . http://www.Microsoft.com/ja-jp/download/details.aspx?id=13255 * Désolé, 'ja-jp' est à moi . S'il vous plaît sélectionnez votre pays. Il y a 2 pilotes, l'un est 32 bits, mais nous avons besoin de la version 64 bits (x86) . Nous pourrions ensuite définir "Source de données ODBC (64 bits)". Il apparaît sur la fenêtre . Enfin, vérifiez votre site Web. Peut-être que ça marche .. Mar. Le 29 2016 Naio

0
Naio

Je suppose que vous aviez raison, vous devez télécharger le pilote SQL Server ODBC pour votre plate-forme client PHP et votre système d'exploitation.
Voici le lien pour le même problème: Appel de la fonction indéfinie odbc_connect ()

vous pouvez aussi essayer d'installer ce connecteur pour MySQL (si vous utilisez MySQL): Connector/ODBC

ou si vous utilisez MSSQL: ODBC Pilote 11 pour SQL Server

0
Nikolay Yenbakhtov