Когда у меня возникла эта проблема, это было потому, что я забыл установить «класс» для сущности. Вот что я придумал:
Вы даже заметите, прежде чем выполнить эти шаги, что «класс» по умолчанию - NSObject, отражающий сообщение об ошибке. Я также нашел несколько программных способов сделать это, но это казалось самым простым / быстрым решением.
Следует отметить, что моя модель написана на языке Swift, поэтому мне пришлось добавить ссылку на функциональную совместимость @objc (Entity), упомянутую @zellb. Но это не должно иметь значения в решении, если вы выполняете эту часть должным образом (и это вызвало бы другую несвязанную ошибку из моего понимания).
Попробуйте следующее:
$meta = $statement->result_metadata();
while ($field = $meta->fetch_field()) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($statement, 'bind_result'), $params);
while ($statement->fetch()) {
foreach($row as $key => $val) {
$c[$key] = $val;
}
$hits[] = $c;
}
$statement->close();
Сначала вы получите метаданные запроса, а затем все поля, которые вы выбрали (вы можете сделать это вручную, но этот код работает для всех запросов, а не для постройка вручную). Функция call_user_func_array ()
вызывает для вас функцию mysqli_stmt :: bind_result ()
для каждого из этих параметров.
После этого достаточно просто просмотреть каждую строку и создание ассоциативного массива для каждой строки и добавление его к массиву, в результате чего будут получены все результаты.
Как ни странно, вы не можете. Просто нет способа получить объект mysqli_result из экземпляра mysqli_stmt. Я всегда считал это серьезным недостатком и мог бы предположить, что это одна из основных причин того, что mysqli никогда не достиг реальной популярности. В наши дни он был заменен PDO, который делает то, что вы хотите, без особых усилий.
Изменить: Мой ответ означает лишь то, что вы не можете делать это по умолчанию. Конечно, вы можете реализовать это самостоятельно, как предложил Крис. Тем не менее, я думаю, вам следует использовать PDO, если это вообще возможно.