РЕДАКТИРОВАТЬ: после обсуждения здесь нажмите здесь Я решил использовать решение Фрэнсиса Авила, это безопаснее, но я не нашел способа использовать свой путь, только все говорятсвой риск безопасности использовать eval ().Если вы найдете способ, чтобы использовать мой способ, пожалуйста, оставьте комментарий.:-), чтобы я понял это, а также другие пользователи, которые используют eval: -)
Еще одна вещь, не использующая eval (), это медленнее, чем я хотел.
РЕДАКТИРОВАТЬ:
Еще один положительный момент, который также есть в решении Фрэнсиса Авилы: вам нужны только конкретные 2 переменные, $ SQL + $ INPUT, больше не нужно брат с $ output.
РЕДАКТИРОВАТЬ: удалил старый вопрос и заменил его следующим, так что вы, возможно, имеете лучшее представление о том, что я хочу сделать.
Я нашел решение, как сделатьдинамическое число переменных, но это не оптимальное решение.Потому что мне нужно отредактировать / добавить больше строк, если число переменных становится больше 8. Итак, есть ли способ сделать это динамически включенным, не передавая на функцию переключения
public function readDB($readdb, $input, $output1) {
$sql = $readdb;
$stmt = $this->mysqli->prepare($sql);
if(!empty($input) && is_array($input)) {
$inputn = count($input);
switch($inputn) {
case "1":
$stmt->bind_param('s', $input[0][0]);
break;
case "2":
$stmt->bind_param('ss', $input[0][0], $input[1][0]);
break;
case "3":
$stmt->bind_param('sss', $input[0][0], $input[1][0], $input[3][0]);
break;
case "4":
$stmt->bind_param('ssss', $input[0][0], $input[1][0], $input[3][0], $input[4][0]);
break;
case "5":
$stmt->bind_param('sssss', $input[0][0], $input[1][0], $input[3][0], $input[4][0], $input[5][0]);
break;
case "6":
$stmt->bind_param('ssssss', $input[0][0], $input[1][0], $input[3][0], $input[4][0], $input[5][0], $input[6][0]);
break;
case "7":
$stmt->bind_param('sssssss', $input[0][0], $input[1][0], $input[3][0], $input[4][0], $input[5][0], $input[6][0], $input[7][0]);
break;
case "8":
$stmt->bind_param('ssssssss', $input[0][0], $input[1][0], $input[3][0], $input[4][0], $input[5][0], $input[6][0], $input[7][0], $input[8][0]);
break;
default:
break;
}
}
if (!$stmt) {throw new Exception($mysqli->error);}
$stmt->execute();
$stmt->store_result();
$checker = $stmt->num_rows;
if($checker !== 0) {
if(!empty($output1)) {
switch($output1) {
case "1":
$stmt->bind_result($output[0]);
while ($stmt->fetch()) {
$results[] = array($output[0]);
}
break;
case "2":
$stmt->bind_result($output[0], $output[1]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1]);
}
break;
case "3":
$stmt->bind_result($output[0], $output[1], $output[2]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2]);
}
break;
case "4":
$stmt->bind_result($output[0], $output[1], $output[2], $output[3]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2], $output[3]);
}
break;
case "5":
$stmt->bind_result($output[0], $output[1], $output[2], $output[3], $output[4]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2], $output[3], $output[4]);
}
break;
case "6":
$stmt->bind_result($output[0], $output[1], $output[2], $output[3], $output[4], $output[5]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2], $output[3], $output[4], $output[5]);
}
break;
case "7":
$stmt->bind_result($output[0], $output[1], $output[2], $output[3], $output[4], $output[5], $output[6]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2], $output[3], $output[4], $output[5], $output[6]);
}
break;
case "8":
$stmt->bind_result($output[0], $output[1], $output[2], $output[3], $output[4], $output[5], $output[6], $output[7]);
while ($stmt->fetch()) {
$results[] = array($output[0], $output[1], $output[2], $output[3], $output[4], $output[5], $output[6], $output[7]);
}
break;
default:
echo "HERE";
break;
}
}
} else {
$results = "NO RESULTS";
}
$stmt->fetch();
$stmt->close();
$this->checker = $checker;
$this->results = $results;
$this->result = array('num_rows' => $checker, $results);
return $this->results;