Я пытаюсь динамически связать параметры mysql_stmt и получить результат в ассоциативном массиве. Я нашел этот пост здесь на stackoverflow, где Amber опубликовала ответ со следующим кодом:
Исходное сообщение:
Как создать правильный класс расширения mysqli с подготовленными операторами?
"Предполагая, что вы действительно хотите написать свою собственную версию (в отличие от использования одной из существующих библиотек, предложенных другими ответами - и это тоже хорошие варианты) ...
Вот несколько функций, которые вам могут пригодиться для изучения. Первый позволяет привязать результаты запроса к ассоциативному массиву, а второй позволяет передавать два массива, один - упорядоченный массив ключей, а другой - ассоциативный массив данных для этих ключей и связывать эти данные в подготовленное заявление: "
function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array(mysqli_stmt_bind_result, $fields);
}
function stmt_bind_params($stmt, $fields, $data) {
// Dynamically build up the arguments for bind_param
$paramstr = '';
$params = array();
foreach($fields as $key)
{
if(is_float($data[$key]))
$paramstr .= 'd';
elseif(is_int($data[$key]))
$paramstr .= 'i';
else
$paramstr .= 's';
$params[] = $data[$key];
}
array_unshift($params, $stmt, $paramstr);
// and then call bind_param with the proper arguments
call_user_func_array('mysqli_stmt_bind_param', $params);
}
Я попытался изучить код, чтобы понять, что он делает, и я заставил вторую функцию работать должным образом, но я не знаю, что мне следует делать, чтобы использовать первую функцию. Как мне использовать его для получения массива, похожего на mysqli_result :: fetch_assoc ()?
Я хочу иметь возможность использовать результат так, как вы привыкли делать с:
while ($row = mysql_fetch_array($result)){
echo $row['foo']." ".$row['bar'];
}
Пожалуйста, помогите мне добиться прогресса в этом:)