2013-05-17 2 views
3

КодексPHP - db2_bind_param Опишите Param Ошибка

$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); 

Я вижу в this link ответ был исправить версии PTF. Однако это относится к «сложным запросам». Это очень простой программный вызов.

Этот код работает отлично в наших живых ISeries, который находится на PHP 5.2.17

Этот код не работает в нашем развитии ISeries, которая в настоящее время на PHP 5.4.0. Строки db2_bind_param вызывают одно и то же сообщение об ошибке.

Было ли существенное изменение в 5.2.x до 5.4? Или это совершенно не связано?

Я пробовал различные методы объявления переменных: одинарные кавычки, двойные кавычки, кавычки ... но ничто из этого не изменилось из-за слабо типизированного синтаксиса PHP.

Также попытался удалить одинарные кавычки вокруг каждого параметра в вызове SQL, который затем просто генерирует ошибку во время подготовки.

+1

Можете ли вы запустить php_info на обоих серверах и проверить, имеют ли модули DB2 одни и те же версии? какая версия ? –

+0

Какие сообщения об ошибках выбрасываются? Если у вас есть номера версий, упомянутые в первом комментарии, вы можете проверить [changelogs] (http://pecl.php.net/package/ibm_db2). – emolah

+0

@adam _ "Также попытался удалить одиночные кавычки вокруг каждого параметра в SQL-вызове, который затем просто генерирует ошибку во время подготовки." _ И какая ошибка будет? Я бы сказал, что вы должны * не * иметь котировки вокруг маркеров параметров. – mustaccio

ответ

0

В первой, вы можете изменить следующие строки в коде:

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

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

С рядом:

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

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

Это может решить ваш вопрос

0

Удалить одиночные кавычки вокруг маркеров связывания :

$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL(?, ?, ?)"); 
Смежные вопросы