PHP eval () можно использовать в моем коде? (динамические аргументы)

EDIT: после того, как я прочитал все данные от других пользователей, я решил использовать то, что @chris предложило call_user_func_array () еще одну причину не использовать eval () медленнее, чем call_user_func_array () , но до сих пор никто не смог ее использовать мой путь, если вы найдете способ, отправьте его в ответ или комментарий :). Поэтому каждый может учиться на этом. Веселый XMAS для всех!

— EDIT END —

Хорошо мне нужно сделать динамический код:

Я получаю пользовательский ввод, например $ _POST ['a'], $ _POST ['b']; // Зависит от каждого запроса, сколько пользовательского ввода.

$sql = "SELECT 1, 2, 3 FROM x WHERE b = ? AND a = ? LIMIT 10"; // SQL STATEMENT $input = array($_POST['a'], $_POST['b']); $output = 3; // Number of variables need for 1, 2, 3 $data = readDB2($sql, $input, $output); var_dump($data); 

этот вход, передается в mysqli-> подготовленные заявления

вызвать число переменных динамическим ($ input и $ output);

Я использовал функцию php eval (); Теперь мой вопрос может быть использован в моем коде?

Просто загляните в мою функцию readDB2, чтобы увидеть, как я использовал функцию eval () (она использовалась 3 раза).

 public function readDB2($sql, $input, $output1) { $stmt = $this->mysqli->prepare($sql); if(!empty($input) && is_array($input)) { $sp = ""; $data = ""; $inputn = count($input) - 1; for($i = 0; $i <= $inputn; $i++) { if($i !== $inputn) { $data .= '$input[' . $i . "],"; } else { $data .= '$input[' . $i . "]"; } $sp .= "s"; } $bind = '$stmt->bind_param(\''. $sp . '\',' . $data . ');'; eval("return $bind"); } if (!$stmt) {throw new Exception($this->mysqli->error);} $stmt->execute(); if (!$stmt) {throw new Exception($this->mysqli->error);} $stmt->store_result(); $checker = $stmt->num_rows; if($checker !== 0) { if(!empty($output1)) { $out = ""; for($i = 1; $i <= $output1; $i++) { if($i !== $output1) { $out .= '$out' . $i . ","; } else { $out .= '$out' . $i; } } $res = '$stmt->bind_result(' . $out . ');'; eval("return $res"); $vars = "array(" . $out . ");"; while ($stmt->fetch()) { $results[] = eval("return $vars"); } } } else { $results = "NO RESULTS"; } $stmt->fetch(); $stmt->close(); $this->results = array('num_rows' => $checker, $results); return $this->results; } 

Изменить для meagar

 $bind = '$stmt->bind_param(\''. $sp . '\',' . $data . ');'; == $bind = '$stmt->bind_param('ss', $input[0], $input[1]);); OR and so on $bind = '$stmt->bind_param('sss', $input[0], $input[1], $input[2]);); 

EDIT для инкогнито:

 $input = array($_POST['pwnd']); $data = readDB2($sql, $input, $output) { public function readDB2($sql, $input, $output) { ... $inputn = count($input) - 1; for($i = 0; $i <= $inputn; $i++) { if($i !== $inputn) { $data .= '$input[' . $i . "],"; } else { $data .= '$input[' . $i . "]"; } $sp .= "s"; } $bind = '$stmt->bind_param(\''. $sp . '\',' . $data . ');'; eval("return $bind"); ... } 

в моем результате

 $bind = '$stmt->bind_param(\''. $sp . '\',' . $data . ');'; 

получает

 eval("return $bind"); 

получает

 $stmt->bind_param('s', $input[0]); 

не то, что вы сказали.