2016-03-17 3 views
3

J'ai mis en place une connexion à une base de données Sybase via unixODBC et FreeTDS sur un serveur CentOS. (Je ne possède pas le serveur Sybase et j'ai juste un compte avec des autorisations en lecture seule)odbc_pconnect fonctionne mais PDO donne une erreur

TL; DR: je peux connecter à la fois avec odbc_pconnect et AOP mais quand j'exécute la même requête odbc_pconnect œuvres alors que les rendements AOP une erreur

histoire complète: j'ai créé un test simple en utilisant odbc_pconnect

$query = "select COUNT(*) from table_name"; 

$conn = odbc_pconnect("myDSN", 'myusername', 'mypassword'); 

if(!$conn) 
    die("Connection failed"); 
if($result = odbc_exec($conn, $query)) 
{ 
    odbc_result_all($result); 
} 

le code ci-dessus fonctionne et j'obtenir le nombre que je veux.

J'essayé d'utiliser PDO

$connectionstring = "odbc:myDSN;"; 
try { 
    $db = new \PDO(
    $connectionstring , 'myusername', 'mypassword'); 
} catch (PDOException $e) 
{ 
    echo 'Connection failed: ' . $e->getMessage(); 
} 
$rs = $db->query($query); 
debug($db->errorInfo()); 

La connexion est estabilished (pas de « connexion a échoué » erreur), mais le serveur renvoie une erreur:

bien

[FreeTDS][SQL Server]ASA Error -121: Permission denied: you do not have permission to use the "CREATE PROCEDURE" statement (SQLExecute[262] at /builddir/build/BUILD/php-5.4.16/ext/pdo_odbc/odbc_stmt.c:254)

, comme vous pouvez voir mon la requête ne tente pas de créer une procédure

J'ai essayé différentes chaînes de connexion mais le résultat ne change pas

Je suppose que le problème est dans ma configuration odbc et freeTDS, plutôt que dans PHP. Mais la question demeure: pourquoi différents comportements?

modifier J'ai trouvé le même problème en essayant d'accéder à la source de données du consolle: si j'essaie avec tsql

tsql -S myDSN -U myusername -P mypassword 

Je peux exécuter la requête. Mais quand j'accès à l'aide isql:

isql -v myDSN myusername mypassword 

je reçois la même erreur que aobove:

[42501][FreeTDS][SQL Server]ASA Error -121: Permission denied: you do not have permission to use the "CREATE PROCEDURE" statement [ISQL]ERROR: Could not SQLExecute

Je suppose qu'elle est liée à this

PS J'utilise CakePHP 3.1.11

+0

Non, je ne sais pas d'où il vient – arilia

+0

pourrait être à [ce] (http://infocenter.sybase.com/help/ index.jsp? topic =/com.sybase.infocenter.dc35570.1550/html/clcprgde/clcprgde194.htm)? – arilia

+1

Pouvez-vous partager cette valeur '$ query'? – itzmukeshy7

Répondre

0

Vous ne pouvez pas créer de procédures, mais CakePHP peut le faire en arrière-plan pour vous. Si vous n'avez lu les privilèges que vous ne pouvez pas créer des procédures, source:

The following describes permission checks for create procedure (also when creating an extended procedure) that differ based on your granular permissions settings.:

Granular permissions enabled - you must have the create procedure privilege. You must have the create any procedure privilege to run create procedure for other users.

Granular permissions disabled - you must be the database owner or have the create procedure privilege.

+0

merci pour votre réponse. Comme vous pouvez le voir sur mon code, je n'utilise pas cakePHP mais j'utilise PDO directement. Bien sûr, si j'utilise le gâteau ORM (et c'est ce que je voudrais faire, à la fin) je reçois la même erreur que le gâteau utilise en interne PDO – arilia

+0

aussi vous avez lié une page de la documentation MySQL, mais je veux me connecter à un SyBase serveur par unixODBC et FreeTDS – arilia

+0

vous avez raison, mais il est similaire, je mettrai à jour la réponse –