Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Firedac select使用Firebird不会返回任何记录_Delphi_Firebird_Firebird2.5_Firedac - Fatal编程技术网

Delphi Firedac select使用Firebird不会返回任何记录

Delphi Firedac select使用Firebird不会返回任何记录,delphi,firebird,firebird2.5,firedac,Delphi,Firebird,Firebird2.5,Firedac,您好,我正在使用Firebird(2.5)作为数据库使用Firedac(Delphi Seattle),当我使用TFDQuery运行此查询时,不会返回任何记录: SELECT ID FROM USERS WHERE PWD = 'êHÆ–!+' 数据库程序中与IbExpert相同的查询返回一条记录。是否需要配置Firedac组件的某些参数来解决此问题。谢谢 它在查询字符串中,它是!烧焦默认情况下,查询字符串是预处理的,您必须转义常量字符,如!,&,:?,{或},否则它们被用作特殊字符 最好的选

您好,我正在使用Firebird(2.5)作为数据库使用Firedac(Delphi Seattle),当我使用TFDQuery运行此查询时,不会返回任何记录:

SELECT ID FROM USERS WHERE PWD = 'êHÆ–!+'

数据库程序中与IbExpert相同的查询返回一条记录。是否需要配置Firedac组件的某些参数来解决此问题。谢谢

它在查询字符串中,它是!烧焦默认情况下,查询字符串是预处理的,您必须转义常量字符,如!,&,:?,{或},否则它们被用作特殊字符

最好的选择是使用参数。这将(除了其他好处)摆脱它!预处理命令中的字符:

FDQuery.SQL.Text := 'SELECT ID FROM USERS WHERE PWD = :Password';
FDQuery.ParamByName('Password').AsString := 'êHÆ–!+';
FDQuery.Open;

另一个选项是转义该常量字符或禁用宏预处理器。有关详细信息,请参阅主题。

什么是连接字符集,什么是列的字符集?顺便说一句:如果这是实际的生产代码,那么出于对安全性的热爱,请重新考虑对用户进行身份验证的方式。应使用合适的密码哈希算法对密码进行哈希运算,您不按密码选择密码,而是按用户名选择密码,然后验证哈希。Firebird中用于此字段的字符集为UTF8,Firedac连接组件中使用的字符集为csUTF8。我同意安全建议,无论如何,这段代码是一个示例,之前有一些代码使用此select,执行后还有另一个检查。您是否尝试过参数化查询?您确定您的Delphi代码实际上是unicode吗?谢谢Uwe,您的提示解决了此问题。无论如何,这很奇怪,因为同一个查询可用于其他值,但此查询失败。似乎有什么东西对Firedac不好。关于标记问题,我已将Firedac连接的CharacterSet参数指定给csUTF8,我不知道是否有必要再检查任何参数。几个月后我阅读了相关内容,因为我们的建议解决了问题,尽管您的解释有助于我理解问题。