Я написал две простые функции, которые дают ту же функциональность, что и $stmt->get_result();
, но они не требуют драйвера mysqlnd.
Вы просто замените
$result = $stmt->get_result();
на $fields = bindAll($stmt);
и
$row= $stmt->get_result();
с $row = fetchRowAssoc($stmt, $fields);
.
(Чтобы получить числа возвращаемых строк, вы можете использовать $stmt->num_rows
.)
Вам просто нужно разместить эти две функции, которые я написал где-то в вашем PHP-скрипте. (например, справа внизу)
function bindAll($stmt) {
$meta = $stmt->result_metadata();
$fields = array();
$fieldRefs = array();
while ($field = $meta->fetch_field())
{
$fields[$field->name] = "";
$fieldRefs[] = &$fields[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $fieldRefs);
$stmt->store_result();
//var_dump($fields);
return $fields;
}
function fetchRowAssoc($stmt, &$fields) {
if ($stmt->fetch()) {
return $fields;
}
return false;
}
Как это работает :
В моем коде используется функция $stmt->result_metadata();
, чтобы выяснить, сколько и какие поля возвращаются, а затем автоматически привязывает полученные результаты к предварительно созданным ссылкам. Работает как очарование!
Вам не нужно error-channel
, если у вас не будет потока компенсации . Если вы просто сгенерируете исключение, как в вашем случае, то не настраивайте error-channel
.
В большинстве случаев нам также не нужен reply-channel
, даже этот default-reply-channel
. Если вы не используете output-channel
в последней конечной точке вашего потока, будет использоваться заголовок replyChannel
. Нам это нужно только reply-channel
для случаев использования, когда нам нужна какая-то обработка ответного сообщения pub-sub, где мы хотели бы отправить ответное сообщение не только в качестве возврата для вызова метода шлюза, но и в какой-то другой поток.
Более подробная информация находится в Документах: https://docs.spring.io/spring-integration/docs/current/reference/html/#gateway
Это зависит от того, что вы хотите сделать; Канал ошибок позволяет анализировать ошибки и возвращать различные результаты на основе исключения.
например. Вы можете попросить их попробовать еще раз для временной ошибки или сообщить о проблеме для фатальной ошибки в запросе.
Канал ответа, как правило, не нужен, если только вы не хотите что-то сделать, например, добавить проводной сигнал, чтобы записать ответ. Фактически этот канал в конечном итоге соединяется с заголовком replyChannel в запросе (именно так шлюз соотносит запросы / ответы.