Intereting Posts
Sanitizing строки, чтобы сделать их URL и имя файла безопасным? Невозможно обновить или удалить динамически с помощью twig и php oop PHP preg_replace () шаблон, строчная дезинфекция Значение в базе данных «участники» показывает ссылку, когда пользователь является администратором Как получить реальное имя хоста или сервера в PHP скрыть видеоконтейнер, когда в базе данных не будет отображаться видео HTML PHP JqGrid Reload не работает Сериализовать двумерный массив json, отправить два массива или другое? Удалите / замените поле имени пользователя по электронной почте с помощью FOSUserBundle в Symfony2 / Symfony3 Номер базы данных MySQL LOAD DATA INFILE Проверка транзакции Paypal через информацию POST Ссылка на чтение человеком в PHP, например «последний понедельник» Понимание приращения Как защитить веб-сайт от массового выскабливания / загрузки? Любой способ получить все строки таблицы, где внешний ключ совпадает с первичным ключом, используя только модели, а не напрямую обращаться к базе данных?

Ошибка преобразования массива в строку

У меня есть запрос, который вытаскивает список идентификаторов. Эти идентификаторы находятся в массиве, и мне нужно найти другую таблицу с этими идентификаторами. Я попытался использовать implode, чтобы сделать эти идентификаторы строкой, которую я мог бы использовать в предложении where, но я продолжаю получать эту ошибку.

Мой текущий код:

$query = $this->db->query(' SELECT * FROM system_scoperights WHERE user = '. $this->session->userdata('username') .' '); foreach ($query->result() as $row) { $scope = $row->site; $data[] = $scope; } $dataScope[] = $data; $idList = implode(',', $dataScope); <---- Error Line $where = 'WHERE scope_scopes.sc_ID IN '. $idList .''; 

Я пробовал разные вещи, которые я нашел на форумах:

  $idList = implode(',', array_values($dataScope)); 

а также

  $idList = implode(',', join($dataScope)); 

но никто из них не работает. (Я даже не слышал о функции объединения)

Заранее спасибо за помощь.

 $dataScope[] = $data; 

но

 $data[] = $scope; 

поэтому $dataScope имеет массив внутри массива. implode работают только на одном уровне, поэтому вы получаете эту ошибку.

Вы должны заметить, что это действительно возможно в SQL:

  SELECT * FROM some_table WHERE id IN (SELECT site FROM another_table WHERE ... ) 

что устранит всю потребность в этом коде.

То есть:

 $where = 'WHERE scope_scopes.sc_ID IN (SELECT site FROM system_scoperights WHERE user = '. $this->session->userdata('username') . ')'; 

Я частично согласен с ответом Джея … просто удалите строку:

 $dataScope[] = $data 

и использовать переменную $data напрямую, поскольку она уже является массивом:

 $idList = implode(',', $data); 

Однако вы также должны использовать (и) в своем предложении where:

 $where = 'WHERE scope_scopes.sc_ID IN (' . $idList . ')'; 

Использование подзапросов в ваших предложениях, хотя они иногда имеют свое место, может стоить много накладных расходов, особенно с помощью «SELECT *». Никогда не просите больше, чем вам нужно, со своих таблиц db 🙂