Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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
Android 在查询中添加SQL字符串_Android_Mysql_Delphi - Fatal编程技术网

Android 在查询中添加SQL字符串

Android 在查询中添加SQL字符串,android,mysql,delphi,Android,Mysql,Delphi,我在Delphi10.2中有这段代码,并在android中运行。 数据位于远程mysql服务器中 Query1.SQL.Text := ''; Query1.SQL.Add('SELECT userid, userphoto, username'); Query1.SQL.Add('FROM users'); Query1.SQL.Add('WHERE usermail = ' + #39 + Text1.Text + #39); Query1.Execute; 问题是查询中的SQL是这样添加

我在Delphi10.2中有这段代码,并在android中运行。 数据位于远程mysql服务器中

Query1.SQL.Text := '';
Query1.SQL.Add('SELECT userid, userphoto, username');
Query1.SQL.Add('FROM users');
Query1.SQL.Add('WHERE usermail = ' + #39 + Text1.Text + #39);
Query1.Execute;
问题是查询中的SQL是这样添加的

SELECT userid, userphoto, username
FROM users
WHERE usermail = 'THE TEXT
'
该SQL返回一个空字段。 为什么最后一个角色要换新行? 谢谢您的回答。

Text1是什么类型的组件?它接受换行吗?似乎正在访问文本1。文本正在返回“文本”10

尝试检查最后一个字符是否为10或13,或者最后两个字符是否为1310,并将其删除

然后按照Bruce McGee说的做:使用带参数的查询。我们不需要另一个易受SQL注入攻击的应用程序。

请尝试查询函数Parameters.ParamByName

在SQL查询中创建一个名为:email的参数,然后指定如下字符串值:

Query1.SQL.Clear;
Query1.SQL.Text('SELECT userid, userphoto, username From users where useremail = :email');
Query1.SQL.ParamByName('useremail').Value := 'THE TEXT';

调试这段代码,看看Text1.TextUnrelated中是否有嵌入的换行符,但我强烈建议使用一个参数,而不是像那样连接where子句。当前代码易受SQL注入的影响。如果不使用应使用的参数化查询!,然后至少使用QuotedStr而不是手动引用:Query1.SQL.Add'WHERE usermail='+QuotedStrText1.Text;这将防止SQL注入攻击。您只需修剪字符串即可。但是,如果Text 1真的允许多行输入,那么文本中间也可能会有断线,所以只看第一个/最后一个字符是不够的。您可能需要改用StringReplace。或者,首先不要使用多行输入控件。