Проблема с запросом MSSQL в PHP и запрос текстовых данных
Я пытаюсь выполнить запрос в PHP для подключения и извлечения данных из базы данных MSSQL EXPRESS (2008 R2). Но я получаю сообщение об ошибке, когда я извлекаю данные из базы данных из ntext.
Ошибка:
Данные Unicode в данных сравнения или только в Unicode не могут быть отправлены клиентам с использованием DB-библиотеки (например, ISQL) или ODBC версии 3.7 или более ранней. (серьезность 16) в
а мой script -
$myServer = ".\SQLEXPRESS";
$myUser = "sa";
$myPass = "blablabla";
$myDB = "test";
//connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
//select a database to work with
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
//declare the SQL statement that will query the database
$query = "SELECT * FROM dbo.table WHERE query='2'";
//$query .= "FROM dbo.table ";
//$query .= "WHERE query='2'";
//execute the SQL query and return records
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>";
//display the results
while($row = mssql_fetch_array($result))
{
echo "<li>" . $row["query"]. "</li>";
}
//close the connection
mssql_close($dbhandle);
любая помощь по этому поводу оценивается....
Спасибо....
Ответы
Ответ 1
Пара параметров из комментариев на странице mssql_query()
-
SELECT CAST(field1 AS TEXT) AS field1 FROM table
- Chang версия в
/etc/freetds.conf
от 4.2 до 8.0 (если сервер PHP - это * nix)
- Избегайте
SELECT *
запросов
Больше, если вы выполните поиск ntext
на этой странице.
Ответ 2
Вот некоторые вещи, которые вам могут понадобиться:
-
Установите поддержку mssql для Debian (Lenny/Squeeze):
apt-get install php5-sybase
-
Когда вы получили это сообщение об ошибке:
"Данные Unicode в данных сортировки или данных nicode не могут быть отправлены клиентам, использующим
DB-Library (например, ISQL) или ODBC версии 3.7 или ранее.
В/etc/freetds/freetds.conf добавьте эти две строки (последние две):
[global]
;tds version = 4.2
tds version = 8.0
client charset = UTF-8
Вы также можете редактировать "charset" в php.ini(но вам не нужно, если вы делали это ранее в
freetds.conf):
; Укажите клиентский набор символов.
; Если пуст или не установлен, используется клиентская кодировка с freetds.comf
; Это используется только при компиляции с помощью FreeTDS
mssql.charset = "UTF-8"
-
Используйте типы столбцов nchar/nvarchar/ntext, если вам нужна поддержка юникода.
Ответ 3
В моем случае мне нужно было установить:
sudo apt-get install php-sybase
И измените файл /etc/freetds.conf:
...
[global]
# TDS protocol version
; tds version = 4.2
tds version = 8.0
client charset = UTF-8
...