使用PHP的SQL Server查询-法语中的特殊字符


SQL Server query with PHP - special char in French

我正在SQL server 2005表中搜索字段。我正在使用类似的东西

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

我可以要求表在没有"where"子句的情况下获得名称,但如果我在where子句中使用这个特定名称"Agence française du texte agréable",我就不能问它

其他所有名称都在起作用,所以我认为问题与字符的"ç"或"é"有关

谢谢你的帮助!

-------------编辑---------------

谢谢你的安慰。我做了另一个测试,删除了çandé,就像这个"Agence francaise du texte agreable"

我仍然无法获取信息!最后我的问题在哪里。。。我还测试了$query="select*from Table where client=‘Agence francise du texte agreable’";

var_dump返回资源(4,SQL Server语句)

和fetch_array的var_dump,返回空

我不明白。。。它与其他名称配合使用:(

----------编辑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);

感谢大家的帮助!

我认为你根本不需要删除特殊字符(即:replace()),为什么不直接删除:

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

如果你真的想删除法语字符,无论出于什么原因:

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

这样,您仍然可以替换法语字符,而不会打乱查询。