2013-05-17 6 views
3

Param Le codePHP - db2_bind_param Décrire Échec

$options = array('autocommit' => DB2_AUTOCOMMIT_OFF); 
$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL('?','?','?')"); 

$connection = db2_connect (AS400_DATABASE, IS_USER_NAME, IS_USER_PASS, $options); 
if (! $connection) { 
    handleError("Unable to connect to the database.", 2); 
} 

$REF = "1234567891123456789122"; 
$PSSN = '123456789'; 
$SSSN = 123456789; 

db2_bind_param($stmt, 1, 'REF', DB2_PARAM_INOUT, DB2_CHAR, 22); //ERROR 
db2_bind_param($stmt, 2, "PSSN", DB2_PARAM_INOUT, DB2_CHAR, 9); //ERROR 
db2_bind_param($stmt, 3, "SSSN", DB2_PARAM_INOUT, DB2_CHAR, 9); //ERROR 

db2_execute($stmt); 

Je vois à this link la réponse était de fixer les versions PTF. Cependant, c'est pour les "requêtes complexes". Ceci est un appel de programme très simple.

Ce code fonctionne très bien dans nos iSeries en direct, ce qui est sur PHP 5.2.17

Ce code ne fonctionne pas dans notre développement iSeries, qui est maintenant sur PHP 5.4.0. Les lignes db2_bind_param affichent toutes le même message d'erreur.

Y a-t-il eu des changements majeurs dans les versions 5.2.x à 5.4? Ou est-ce complètement indépendant?

J'ai essayé différentes méthodes de déclaration de variables: guillemets simples, guillemets doubles, guillemets ... mais rien de tout cela n'a fait de différence à cause de la syntaxe lâche de PHP.

Également tenté de supprimer les guillemets simples autour de chaque paramètre dans l'appel SQL, qui génère alors juste une erreur lors de la préparation.

+1

Pouvez-vous lancer php_info sur le serveur et vérifier si le module DB2 a les mêmes versions? quelle version? –

+0

Quels messages d'erreur sont générés? Si vous avez les numéros de version mentionnés dans le premier commentaire, vous pouvez vérifier les [changelogs] (http://pecl.php.net/package/ibm_db2). – emolah

+0

@adam _ "Vous avez également essayé de supprimer les guillemets simples autour de chaque paramètre de l'appel SQL, ce qui génère alors simplement une erreur lors de la préparation." _ Et quelle erreur serait-ce? Je dirais que vous ne devriez pas avoir de guillemets autour des marqueurs de paramètres. – mustaccio

Répondre

0

Tout d'abord, pourriez-vous changer lignes suivantes dans votre code:

$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL('?','?','?')"); 

$connection = db2_connect (AS400_DATABASE, IS_USER_NAME, IS_USER_PASS, $options) 

Avec suivante:

$connection = db2_connect (AS400_DATABASE, IS_USER_NAME, IS_USER_PASS, $options) 

$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL('?','?','?')"); 

Cela pourrait résoudre votre problème

0

Retirez les guillemets simples autour des marqueurs de grippage :

$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL(?, ?, ?)");