Nom de source de données introuvable et de pilote non spécifié

J'ai besoin d'aider à corriger une erreur: SQL state IM014 in SQLConnect et SQL state IM002 in SQLConnect.

Je lance le même script, l'un sur webserver/remote/ et l'autre à partir de la Machine locale tente d'accéder à la même base de données mais j'obtiens un message d'erreur différents.

Quand je l'exécuter à partir du serveur web je obtenir

SQL error: [unixODBC][Gestionnaire de pilotes]nom de source de Données introuvable et aucun pilote par défaut spécifié, SQL état IM002 dans SQL

où, comme lorsque je l'exécute sur la machine locale-je obtenir

[Microsoft][Gestionnaire de pilotes ODBC] spécifié DSN contient une architecture de discordance entre le Pilote et l'Application

J'ai utilisé le code suivant dans le script php pour se connecter à la base de données Locale

$odbc['dsn'] = "SageLine50v19";
$odbc['user'] = "Peac";
$odbc['pass'] = "XXXX";
$mysql['host'] = "localhost";
$mysql['user'] = "root";
$mysql['pass'] = "";
$mysql['dbname'] = "sagetest";
$mysql['idfield'] = "id";


//Step 1: Connect to the source ODBC database
if ($debug) echo "Connect to " . $odbc['dsn'] . ' as ' . $odbc['user'] . "\n";
$conn = odbc_connect($odbc['dsn'], $odbc['user'], $odbc['pass']);
if (!$conn) {
die("Error connecting to the ODBC database: " . odbc_errormsg());
}

//loop through each table 
$allTables = odbc_tables($conn);
$tablesArray = array();
while (odbc_fetch_row($allTables)) {
 if (odbc_result($allTables, "TABLE_TYPE") == "TABLE") {
    $tablesArray[] = odbc_result($allTables, "TABLE_NAME");
 }
}
 //print_r($tablesArray);      //to list all tables

Mon ODBC.ini ressemble à ci-dessous

[ODBC 32 bit Data Sources]
manager=Sage Line 50 v16 (32 bit)
t=SQL Server Native Client 10.0 (32 bit)
s1=Pervasive ODBC Client Interface (32 bit)
SageLine50v19=Pervasive ODBC Client Interface (32 bit)
[manager]
Driver32=C:\Windows\SysWOW64\S16DBC32.dll
[t]
Driver32=C:\Windows\system32\sqlncli10.dll
[s1]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll
[SageLine50v19]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll
La DSN architecture décalage est parce que le nombre de bits de la demande et le nombre de bits du pilote sont différents, vous essayez d'utiliser un pilote 32 bits avec une application 64 bits ou vice versa. Vous aurez besoin de les faire correspondre pour que tout fonctionne correctement. En local sur votre machine, si vous utilisez un pilote 32 bits de passer à une version 64 bits de l'un et essayez de nouveau. Sur le serveur, vous avez le pilote et le DSN installé?
merci pour la réponse, je ne suis pas sûr de DSN, mais je sais que mon hébergeur a ajouté "odbc" extension. je vais vérifier avec eux à propos de la DSN
Il ne suffit pas d'avoir seulement le pilote ODBC est installé, vous devez également créer une source de données sur le serveur de connexion, le même que sur votre ordinateur local. Si vous déployez le même code, alors vous devez vous assurer que la source de données est configuré de manière identique à celui que vous avez localement.
Est-il une raison de ne pas utiliser la norme mysqli ou pdo_mysql à la place?
parce que ODBC n'est pas seulement pour MySQL... Aussi pour ce de sa valeur, KylePorter est correct, j'ai fini par avoir besoin d'écrire une interface pour le 32 -> 64, il s'avère que c'est vraiment pas agréable.

OriginalL'auteur Keven | 2014-10-10