То, как я могу поместить результаты MySQLi, подготовило оператор в ассоциативный массив?

Когда у меня возникла эта проблема, это было потому, что я забыл установить «класс» для сущности. Вот что я придумал:

  1. Нажмите на файл .xcdatamodelId в панели структуры вашего файла / навигатора проекта (крайний левый).
  2. Выберите объект, с которым у вас возникли проблемы.
  3. На панели «Утилиты» (в крайнем правом углу) найдите значок, похожий на сотовый телефон 1997 года, инспектора моделей данных.
  4. В настройках сущности вы должны увидеть два поля: «Имя» и «Класс» - установите «Класс» с названием используемого вами класса (обычно это то же самое, что и «Имя»).

Вы даже заметите, прежде чем выполнить эти шаги, что «класс» по умолчанию - NSObject, отражающий сообщение об ошибке. Я также нашел несколько программных способов сделать это, но это казалось самым простым / быстрым решением.

Следует отметить, что моя модель написана на языке Swift, поэтому мне пришлось добавить ссылку на функциональную совместимость @objc (Entity), упомянутую @zellb. Но это не должно иметь значения в решении, если вы выполняете эту часть должным образом (и это вызвало бы другую несвязанную ошибку из моего понимания).

9
задан zeckdude 14 June 2009 в 23:34
поделиться

2 ответа

Попробуйте следующее:

$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 () для каждого из этих параметров.

После этого достаточно просто просмотреть каждую строку и создание ассоциативного массива для каждой строки и добавление его к массиву, в результате чего будут получены все результаты.

30
ответ дан 4 December 2019 в 06:19
поделиться

Как ни странно, вы не можете. Просто нет способа получить объект mysqli_result из экземпляра mysqli_stmt. Я всегда считал это серьезным недостатком и мог бы предположить, что это одна из основных причин того, что mysqli никогда не достиг реальной популярности. В наши дни он был заменен PDO, который делает то, что вы хотите, без особых усилий.

Изменить: Мой ответ означает лишь то, что вы не можете делать это по умолчанию. Конечно, вы можете реализовать это самостоятельно, как предложил Крис. Тем не менее, я думаю, вам следует использовать PDO, если это вообще возможно.

1
ответ дан 4 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: