2010-06-02 8 views
0
connect(); 
$arr = mssql_fetch_assoc(mssql_query("SELECT Applications.ProductName, 
     Applications.ProductVersion, Applications.ProductSize, 
     Applications.Description, Applications.ProductKey, Applications.ProductKeyID, 
     Applications.AutomatedInstaller, Applications.AutomatedInstallerName, 
     Applications.ISO, Applications.ISOName, Applications.Internet, 
     Applications.InternetURL, Applications.DatePublished, Applications.LicenseID, 
     Applications.InstallationGuide, Vendors.VendorName 
FROM Applications 
INNER JOIN Vendors ON Applications.VendorID = Vendors.VendorID 
WHERE ApplicationID = ".$ApplicationID)); 

$query1 = mssql_query("SELECT Issues.AppID, Issues.KnownIssues 
     FROM Issues 
     WHERE Issues.AppID=".$ApplicationID); 
$issues = mssql_fetch_assoc($query1); 
$query2 = mssql_query("SELECT ApplicationInfo.AppID, 
       ApplicationInfo.Support_Status, ApplicationInfo.UD_Training, 
       ApplicationInfo.AtomicTraining, ApplicationInfo.VendorURL 
    FROM ApplicationInfo 
    WHERE ApplicationInfo.AppID = ".$ApplicationID); 
$row = mssql_fetch_assoc($query2); 
function connect(){ 
$connect = mssql_connect(DBSERVER, DBO, DBPW) or 
     die("Unable to connect to server"); 
$selected = mssql_select_db(DBNAME, $connect) or 
     die("Unable to connect to database"); 
return $connect; 
} 

Ci-dessus est le code. La première requête/fetch_assoc fonctionne parfaitement bien, mais les 2 requêtes suivantes échouent et je n'arrive pas à comprendre pourquoi. Voici la déclaration d'erreur qui apparaît de php:Pourquoi ma requête SQL Server échoue-t-elle?

Warning: mssql_query() [function.mssql-query]: message: Invalid object name 'Issues'. (severity 16) in /srv/www/htdocs/agreement.php on line 47

Warning: mssql_query() [function.mssql-query]: General SQL Server error: Check messages from the SQL Server (severity 16) in /srv/www/htdocs/agreement.php on line 47 Warning: mssql_query() [function.mssql-query]: Query failed in /srv/www/htdocs/agreement.php on line 47

Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource in /srv/www/htdocs/agreement.php on line 48

Warning: mssql_query() [function.mssql-query]: message: Invalid object name 'software.software_dbo.ApplicationInfo'. (severity 16) in /srv/www/htdocs/agreement.php on line 51

Warning: mssql_query() [function.mssql-query]: General SQL Server error: Check messages from the SQL Server (severity 16) in /srv/www/htdocs/agreement.php on line 51

Warning: mssql_query() [function.mssql-query]: Query failed in /srv/www/htdocs/agreement.php on line 51

Warning: mssql_fetch_assoc(): supplied argument is not a valid MS SQL-result resource in /srv/www/htdocs/agreement.php on line 52

L'erreur centres clairement autour du fait que la requête ne soit pas en cours d'exécution. Dans ma base de données, j'ai une table appelée Issues et une table appelée ApplicationInfo, donc je ne sais pas pourquoi il me dit que ce sont des objets invalides.

+3

Ces erreurs essaient de vous dire que certains tableaux/Champs-vous La référence dans votre requête est soit invalide, soit inexistante. Revérifiez pour les types-o. –

+0

'ApplicationInfo' est différent de' software.software_dbo.ApplicationInfo' –

+0

Les requêtes * look * ok (en faisant certaines hypothèses sur la structure de votre base de données). Est-ce qu'ils fonctionnent lorsque vous les exécutez directement à partir d'une fenêtre de requête SSMS? Si oui, alors ce ne sont pas les requêtes elles-mêmes. –

Répondre

2

Vérifiez que vous interrogez la base de données droite ou schéma.

software.software_dbo.ApplicationInfo moyens:

  • une base de données nommée software
  • un schéma nommé software_dbo - probable que ce soit le problème. Probablement dbo sur votre serveur SQL.
  • une vue/table nommée ApplicationInfo

vérifier peut-être ce que la valeur de DBO, parmi les autres arguments, est dans cette déclaration: $connect = mssql_connect(DBSERVER, DBO, DBPW)

+0

Merci. Le remplacement de software_dbo par dbo a résolu le problème. Question tho - Pourquoi la première requête n'en a-t-elle pas besoin, mais les 2 autres? –

0

Vérifiez que l'utilisateur auquel vous vous connectez est autorisé à utiliser les tables que vous tentez d'interroger. Les coutures comme le problème est que les tables ne peuvent pas être trouvées.

La meilleure façon de gérer ce serait d'accorder les permssions utilisateur à tous les objets dans cette base de données:

GRANT SELECT, INSERT, DELETE <any other permissions that user needs> ON `database`.`*` TO `user`@`localhost` IDENTIFIED BY 'password' 
+0

J'ai des autorisations complètes sur chaque objet de la base de données. –

+0

Juste une note, la commande GRANT ci-dessus s'applique à MySQL, la question de l'affiche d'origine est liée à MSSQL. –