Bonsoir.
Pourquoi est-ce que tu crées un Driver pour SQL Server, alors qu'il en existe déjà un sur CakePHP ?
namespace Cake\Database\Driver; » Sqlserver.
Bonjour,
J'ai besoin de me connecter à une base de données SQL Server 2008 R2 et j'ai créé mon propre driver Cake pour ce faire. Cela "marchouille", dans le sens ou model->schema() fonctionne mais dès que je veux faire un model->find(), cela plante.
Ce que je fais
La classe du driver :
Ce que je veux
C'est relativement simple, j'aimerais utiliser l'ORM de Cake pour attaquer une base SQL Server 2008 R2.
Ce que j'obtiens
Lors de l'appel de la méthode find sur mon model, j'obtiens le message d'erreur suivant :
Function name must be a string in /home/dev/www/lab/erpdash/vendor/cakephp/cakephp/src/Database/Driver.php on line 331.
Ce qui correspond à la ligne suivante $query = $translator($query); dans le code ci-dessous.
En effet cette méthode (queryTranslator) n'est pas implémentée dans mon driver car je n'arrive pas à déterminer ce que je dois retourner (un callable dit la doc).
Merci pour votre aide !
7 réponses
Bonsoir,
Car le driver natif ne fonctionne pas sur mon environnement. Le message que j'obtiens lors de l'utilisation du driver natif (dès le lancement de l'application) :
Database driver Cake\Database\Driver\Sqlserver cannot be used due to a missing PHP extension or unmet dependency
Je me suis aperçu que dans ce driver, la méthode enabled teste l'existence du driver PDO qui se nomme sqlsrv... N'existe pas chez moi. C'est "dblib" qui fonctionne.
Dans ce cas là, tu devrais penser à ne plus utiliser dblib, car après quelques petites recherches, voici ce qu'il en sort :
PDO_DBLIB est un pilote qui implémente l'interface de PHP Data Objects (PDO) pour autoriser l'accès de PHP au Microsoft SQL Server et aux bases de données Sybase par la bibliothèque FreeTDS.
Cette extension n'est plus disponible sous Windows avec PHP 5.3 et suivant.
Sous Windows, vous devriez utiliser SqlSrv, un driver alternatif pour MS SQL disponible chez Microsoft : » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx .
Si vous ne pouvez pas utiliser SqlSrv, vous pouvez utiliser le driver PDO_ODBC pour se connecter à un serveur de bases de données Microsoft SQL et Sybase, sachant que le driver natif Windows DB-LIB est ancien, non sécurisé niveau thread et plus supporté par Microsoft.
Re,
Et merci de ton aide (te l'avais pas dit tout à l'heure).
Mon serveur est sous Debian8, cela veut dire que je ne peux pas utiliser le driver sous Windows. Il ne me reste plus alors qu'une connexion ODBC ?
Pour y avoir goûté sur d'autres projets, les performances ne sont pas au rendez-vous et je manipule de "grosses" bases de données pas forcément bien indexées. C'est pour cette raison que je suis parti direct sur Dblib.
Au vu de l'infomation que tu me donnes (techno obsolète), je crois que je n'ai pas le choix... :(
Encore merci de ton aide.
De rien.
Il y a une chose que j'ai du mal à suivre.
Tu dis que ton serveur est sur un Debian 8, soit sur un système d'exploitation Linux et tu utilises Microsoft SQL server dans ton serveur Linux ?
Pourquoi tu n'utilises pas directement du MySQL ou autre à la place ?
Il ne me reste plus alors qu'une connexion ODBC ?
Seulement s'il t'est impossible d'installer le driver Sqlsrv, mais si tu le peux, il est préférable que tu installes ce dernier, si tu restes bien sûr sur du SQL Server.
Bonjour,
J'ai un serveur Apache sur Debian qui possède bien MySQL et que j'utilise pour le fonctionnement de mon site (navigation, paramètres...) Mais j'accède à des données d'un ERP hébergées sur un autre serveur qui est évidement en Windows pour faire tourner SQL Server.
Je vais donc ce matin me lancer dans l'installation du pilote pdo-odbc...
Il y a moi aussi un truc que je ne comprends pas. Dans Cake, quel driver utiliser pour PDO-ODBC ?