Oracle связывает все $ _POST

я использую oci_bind_by_name(),

oci_bind_by_name($stid, ":post1", $_POST['post1']);
oci_bind_by_name($stid, ":post2", $_POST['post2']);
oci_bind_by_name($stid, ":post3", $_POST['post3']);
oci_bind_by_name($stid, ":post4", $_POST['post4']);
...

Можно ли сделать это динамически в PHP, для всех $_POST ключи звонят oci_bind_by_name() с таким же именем?

Просто чтобы упростить мой код, так как у меня около 50 звонков oci_bind_by_name(),

2

Решение

Это может быть просто сделано с foreach перебрать $_POST массив, используя ключ в качестве имени параметра:

// Bind all in a loop:
foreach ($_POST as $key => $value) {
oci_bind_by_name($stid, ":$key", $value);
}

Однако вы не можете гарантировать, что клиент отправил вам ключи в POST, которые вам действительно нужны. Затем важно сравнить их с массивом ключей, которые действительно допустимы для использования в подготовленном операторе:

$valid_keys = array(
'post1',
'post2',
...
...
'post99'
);

Затем зациклите их, проверяя, что они действительно были отправлены в POST, прежде чем пытаться их использовать.

foreach ($valid_keys as $key) {
if (!isset($_POST[$key])) {
// ERROR! Needed key was not present in $_POST!
// Break the loop if you can't execute the statement...
}
else {
oci_bind_by_name($stid, ":$key", $_POST[$key]);
}
}

Если вы собираетесь динамически создавать подготовленную строку SQL оператора, особенно важно поддерживать список безопасных имен параметров.

2

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

Если вы используете простой цикл foreach для привязки каждой переменной; НЕ связывать с переменной $ value цикла

 // Bind all in a loop: but DO NOT use $value
foreach ($_POST as $key => $value) {
oci_bind_by_name($stid, ":$key", $_POST[$key]);
}

Цитировать из руководства Пример 3 из oci_bind_by_name ():

foreach ($ba as $key => $val) {
// oci_bind_by_name($stid, $key, $val) does not work
// because it binds each placeholder to the same location: $val
// instead use the actual location of the data: $ba[$key]
oci_bind_by_name($stid, $key, $ba[$key]);
}
1

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