2009-10-19 10 views
0

J'ai presque un ensemble basique de fonctions d'aide pour accéder à ADO via PHP. Je rencontre un problème lors de l'exécution d'une procédure stockée avec l'option adExecuteNoRecords définie pour $ cmd-> Execute (,, adExecuteNoRecords);PHP, appelant une méthode d'objet ADO qui a des paramètres optionnels

J'ai essayé de null pour les deux premiers paramètres, nouveau VARAINT(), VARIANT (null), VARIANT (VT_EMPTY), etc ...

je soit retourner un « ne peut pas passer le paramètre 1 par référence "ou une com_exception de Type Mismatch, et -> Execute (" adExecuteNoRecords) ne passe pas l'analyse PHP.

J'ai fait beaucoup de recherche, mais je n'ai pas trouvé un seul exemple de personne qui l'utilise.

Donc, en PHP lors de l'appel de la méthode d'un objet COM qui a des paramètres optionnels, comment définir le paramètre de début à rien?

Merci.

+0

Note latérale: lors de l'exécution d'une procédure stockée même si elle n'a pas de paramètres, vous devez toujours faire un $ cmd-> Paramètres-> Actualiser; – ddowns

Répondre

1

Essayez de passer $missing = new Variant(VT_ERROR) à la place des paramètres facultatifs. Btw, dans les paramètres COM, même facultatifs, ont toujours des types. Si un paramètre optionnel est BSTR, l'omettre est généralement comme passer une chaîne vide. Ce qui peut sembler étrange, c'est que la valeur par défaut du param facultatif est spécifiée dans la bibliothèque de types. C'est à dire. un paramètre BSTR facultatif peut avoir une valeur par défaut "abc". Vous devriez donc rechercher ceci avant de construire l'appel en PHP. Dans votre cas particulier, Execute a 3 paramtres VARIANT optionnels sans valeurs par dfaut, nous utilisons donc VT_ERROR pour indiquer le paramtre VARIANT manquant.