Я создаю приложение с помощью 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]






У вас нет пробела между FROM и именем таблицы.
$sql = "SELECT top 5 FROM" + $bdd+" WHERE id = ?";
должно быть
$sql = "SELECT top 5 FROM " + $bdd+" WHERE id = ?";
Вместо разбора ошибки и публикации частей, которые вы считаете важными, было бы лучше опубликовать полный неизмененный вывод.
Хорошо, использование «топ-50» будет проблемой. Я не знаком с MSQL, но с MySQL вы бы написали запрос типа «выбрать * из ограничения таблицы 50»
Это не работает, когда я тоже пытаюсь получить все данные!
Я думаю, вам нужно написать запрос как «выбрать * из [SS $ DP - Order] limit 50». Я не уверен на 100% в MSQL, но попробуйте это.
Я решаю эту проблему следующим образом:
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();
}
}
Мне пришлось использовать конкатенацию вместо добавления.
теперь он говорит Сообщение: ** Обнаружено нечисловое значение **, и он указывает на
$sql