Проблема с передачей db2_bind_param в строковых параметрах

В настоящее время у меня проблема с запуском запроса, который требует передачи строковых параметров. Обычно я бы обошел это, поместив указанные строки непосредственно в сам запрос, но я хочу начать применять надлежащие протоколы безопасности и лучшие практики, дезинфицируя входные данные.

Вот запрос:

$newAddr->query = "insert into sampleSchema.SampleCustomerAddresses (customer_number, address_id, addr_line1, addr_line2, city, state, zipcode)
values (?,?,?,?,?,?,?)";

Мои параметры передаются следующим образом:

$newAddr->parameters = [$CUSTOMER, $addrId, $addrL1, $addrL2, $city, $state, $zip];
$newAddr->performDBCall();

Код, который обрабатывает привязку параметров:

if (count($this->parameters) != 0){
foreach ($this->parameters as $param) {
db2_bind_param($dbStatement, $i, 'param', DB2_PARAM_IN);
$i++;
}
}

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

Вопрос в том, как передать строковые параметры через db2_bind_param? Или я должен выполнить отдельную очистку, а затем добавить параметры непосредственно в запрос?

0

Решение

После некоторого расследования я закончил тем, что нашел основную причину. В моем исходном цикле параметров я использовал цикл foreach и назначал параметры $ this-> параметру $ param. Чего я не знал, так это того, что привязка параметров происходила непосредственно перед выполнением. Поэтому у меня было что-то вроде этого:

db2_bind_param($dbStatement, 1, "param", DB2_PARAM_IN);
db2_bind_param($dbStatement, 2, "param", DB2_PARAM_IN);
db2_bind_param($dbStatement, 3, "param", DB2_PARAM_IN);
db2_bind_param($dbStatement, 4, "param", DB2_PARAM_IN);

Я ожидал, что это будет связано сразу же, тогда ссылка будет понятна для следующего связывания.

Поэтому я заменил этот раздел следующим:

$numOfParams = count($this->parameters);
if ($numOfParams != 0){
for ($i = 0; $i < $numOfParams; $i++){
$param = 'param'.$i;
${$param} = $this->parameters[$i];
$k = $i + 1;
db2_bind_param($dbStatement, $k, "param{$i}", DB2_PARAM_IN);
}
}

Это позволило мне создать временные ссылки на переменные с соответствующими именами строк на весь срок действия функции. Это закончило тем, что решило другую проблему со всеми параметрами, являющимися дубликатами окончательного связанного значения, которое я обнаружил некоторое время спустя, экспериментируя с этой проблемой.

Надеюсь, это может помочь кому-то еще в будущем с подобной проблемой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]