Запрос SQL Server с PHP - специальный символ на французском языке

Я ищу поле в таблице SQL Server 2005. Я использую что-то вроде

$query = "select * from TableName where replace ( replace ( client , 'é' ,'e' ) , 'ç' ,'c' ) COLLATE French_CI_AI = 'Agence française du texte agréable'"; 

Я могу попросить таблицу получить имя без предложения «где», но я не могу спросить, если я использую это конкретное имя «Agence française du texte agréable» в предложении where.

Все остальные имена работают, поэтому я предполагаю, что проблема связана с символом «ç» или «é».

спасибо за помощь !

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

спасибо за ваш ответ. Я сделал еще один тест, удалив ç и é, например, «Agence francaise du texte agreable».

И я до сих пор не могу получить информацию! Итак, наконец, где моя проблема? ... Я также протестировал $query = "select * from Table where client = 'Agence francaise du texte agreable'";

и var_dump возвращает ресурс (4, оператор SQL Server)

и var_dump fetch_array возвращает null

Я не понимаю... с другими именами работает :(

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

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

$query = "select * from Table where client COLLATE French_CI_AI = 'Agence française du texte agréable'"; 

// SQLSrv_num_rows requires a static or keyset cursor.
if (strncmp(ltrim(strtoupper($query)), 'SELECT', strlen('SELECT')) == 0)
{
$array = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
}
else
{
$array = array();
}

$cursor = sqlsrv_query($db, $query, array(), $array);
$row = sqlsrv_fetch_array($cursor, SQLSRV_FETCH_NUMERIC);

Спасибо за вашу помощь!


person cedric    schedule 23.03.2016    source источник
comment
Сравнение utf позволит 'é' = 'e' быть true. по какой причине вы пытаетесь УДАЛИТЬ акцентированные символы из поля client, а затем сравнить со строкой, содержащей те самые символы, которые вы только что удалили? уберите это яблоко и замените его апельсином. Эй, почему это больше не яблоко?   -  person Marc B    schedule 23.03.2016
comment
Не могли бы вы немного подробнее описать проблему, которую пытаетесь решить?   -  person BPS    schedule 23.03.2016
comment
Я нашел свою проблему. Как вы сказали, мне это не нужно, я внес несколько изменений и обнаружил, что как только мой запрос получает только один результат, я не могу его прочитать. (см. изменения кода в моем первом посте)   -  person cedric    schedule 24.03.2016


Ответы (1)


Я не думаю, что вам вообще нужно удалять специальные символы (например, replace() ), почему бы просто не сделать:

$query = "select * from TableName COLLATE French_CI_AI = 'Agence française du texte agréable'"; 

тогда, если вы действительно хотите удалить французские символы по какой-либо причине:

$result = str_replace("é", "e", str_replace("ç", "c"$result);

Таким образом, вы все еще можете заменить французские символы и не испортить свой запрос.

person Trevor Clarke    schedule 23.03.2016