Как использовать имя базы данных с пробелом и специальным символом в sql

Я создаю приложение с помощью CodeIgniter. в настоящее время пытается найти способ получить данные из второй базы данных, которая содержит таблицы с именами, содержащими специальные символы и пробелы.

Я пытаюсь получить данные в своей модели следующим образом:

 public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $bdd ='[SS$DP - Order]';
    if ($username) {
        $sql = "SELECT top 5 FROM" + $bdd+"  WHERE id = ?";
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }

    $sql = 'SELECT top 5 FROM [SS$DP - Order]';
    $query = $this->legacy_db->query($sql);
    return $query->result_array();
}

но я получаю эту ошибку:

[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrect vers le mot clé 'FROM'. SELECT top 5 FROM [SS$DP - Order]

Здесь я определил альтернативное подключение к этой базе данных:

$db['OtherDB'] = array(
'dsn'   => '',
'hostname' => '192.168.14.100',
 'port' => '1433',
'username' => 'StockAgent',
'password' => 'StockAgent',
'database' => 'SVC',
'dbdriver' => 'sqlsrv',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE

);

Может ли кто-нибудь сказать мне, в чем проблема и как это исправить?

РЕДАКТИРОВАТЬ2

После добавления пробела между От и $бдд

Severity: Warning

Сообщение: Обнаружено нечисловое значение

указывая на эту строку:

 $sql = "SELECT * FROM " + $bdd;

РЕДАКТИРОВАТЬ 2

Я понял, что $бдд — это строка, поэтому лучше использовать конкатенацию .=$bdd вместо +$bdd

Итак, моя функция стала такой:

   public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $bdd ='[SS$DP - Order]';

    /*($username) {
        $sql = "SELECT top 5 FROM " +$bdd;/* " WHERE id = ?"
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }*/

    $sql = "SELECT top 2 FROM " ;
    $sql. = " ";
    $sql.=$bdd;
    $query = $this->legacy_db->query($sql);
    return $query->result_array();

}

когда я пытаюсь получить всю дату с помощью select *, я получаю эту ошибку:

Memory limit of 10240 KB exceeded for buffered query SELECT * FROM [SS$DP - Order]

Но когда я ограничиваю размер, делая топ-50, я получаю это

[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrecte vers le mot clé 'FROM'. SELECT top 50 FROM [SS$DP - Order]

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
95
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас нет пробела между FROM и именем таблицы.

$sql = "SELECT top 5 FROM" + $bdd+"  WHERE id = ?";

должно быть

$sql = "SELECT top 5 FROM " + $bdd+"  WHERE id = ?";

теперь он говорит Сообщение: ** Обнаружено нечисловое значение **, и он указывает на $sql

M_M 10.07.2019 12:08

Вместо разбора ошибки и публикации частей, которые вы считаете важными, было бы лучше опубликовать полный неизмененный вывод.

John.M 10.07.2019 12:22

Хорошо, использование «топ-50» будет проблемой. Я не знаком с MSQL, но с MySQL вы бы написали запрос типа «выбрать * из ограничения таблицы 50»

John.M 10.07.2019 12:41

Это не работает, когда я тоже пытаюсь получить все данные!

M_M 10.07.2019 12:43

Я думаю, вам нужно написать запрос как «выбрать * из [SS $ DP - Order] limit 50». Я не уверен на 100% в MSQL, но попробуйте это.

John.M 10.07.2019 12:50
Ответ принят как подходящий

Я решаю эту проблему следующим образом:

   public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $DP  = "\$DP";
    $bdd  = "[Sovac\$DP - Order]";

    if ($username) {
        $sql = "SELECT top 5 FROM ".$bdd ." WHERE id = ?";
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }
 }

Мне пришлось использовать конкатенацию вместо добавления.

Другие вопросы по теме