2016-09-27 4 views
1

Я пытаюсь подготовить инструкцию sql с неизвестным количеством параметров! Эти параметры передаются в массиве. Нормальный синтаксис функции будет:Передача массива в качестве аргументов в php

$stmt->bind_param("string of types",param1,param2,...,paramN) 

проблема, я не знаю, как добавить параметры в функции $ stmt-> bind_param из массива

У меня есть этот код, но он не работы:

$stmt= $conn->prepare($request['query']); 
if(isset($request['params'])){ 
call_user_func_array('$stmt->bind_param',$request['params']); 
} 
$stmt->execute(); 
$result = $stmt->get_result(); 

$ request ['params'] содержит правильные параметры, которые необходимо добавить в функцию.

Но call_user_func_array дает мне эту ошибку:

call_user_func_array() expects parameter 1 to be a valid callback, function '$stmt->bind_param' not found or invalid function.

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

+1

Прочитайте [документацию] (http://php.net/call_user_func_array) о функциях, которые вы используете. Обратите внимание, что в примерах показано, как правильно вызвать методы объекта с помощью этой функции. –

ответ

1

Попробуйте что-то вроде:

call_user_func_array(array($stmt,'bind_param'),$request['params']); 
+0

Спасибо! Проблема в том, что она дает значение, а не ссылку: Параметр 2 для mysqli_stmt :: bind_param() ожидается как ссылка, значение задано –

+0

Решено! Я использовал 'call_user_func_array (array ($ stmt, 'bind_param'), refValues ​​($ request ['params']));' с этой функцией я получил в Интернете: 'function refValues ​​($ arr) { if (strnatcmp (phpversion(), '5.3')> = 0) // Требуется ссылка для PHP 5.3+ { $ refs = array(); foreach ($ arr as $ key => $ value) $ refs [$ key] = & $ arr [$ key]; return $ refs; } return $ arr; } ' –

2

Чтобы использовать метод в качестве параметра обратного вызова для call_user_func_array, используйте массив с именем объекта и имя метода в нем в качестве параметра обратного вызова.

страница call_user_func_array документации Check PHP для дальнейших объяснений: http://php.net/manual/pt_BR/function.call-user-func-array.php

// Call the $foo->bar() method with 2 arguments 
$foo = new foo; 
call_user_func_array(array($foo, "bar"), array("three", "four")); 
3

Если вы используете PHP 5.6+, вы можете также использовать оператор splat, а не использовать call_user_func_array, например,

$stmt->bind_param($types, ...$request['params']); 

Это было бы аккуратнее для вашего сценария использования, так как есть первоначальный аргумент bind_param, что в противном случае должны были бы быть shift -ED на передней части массива аргументов.

+0

Я не использую 5.6+! Потому что это просто тест на usbwebserver и thats 5.2, но ваше решение было бы лучшим, если бы у меня была эта версия –

Смежные вопросы