String 如何在delphi/interbase中进行字符串为blob的插入查询

String 如何在delphi/interbase中进行字符串为blob的插入查询,string,delphi,blob,interbase,String,Delphi,Blob,Interbase,我想做一个查询插入: 在表格(BLOB_字段)中插入值(MY_BLOB_VAL) 但我在delphi中只有字符串值,例如: procedure INSERT_BLOB_QUERY var query:String; my_blob_val:String; begin my_blob_val := 'a blob string to be inserted'; query := 'INSERT INTO A_TABLE (BLOB_FIELD) VALUES(' +

我想做一个查询插入:

在表格(BLOB_字段)中插入值(MY_BLOB_VAL)

但我在delphi中只有字符串值,例如:

procedure INSERT_BLOB_QUERY
  var
    query:String;
    my_blob_val:String;
begin
   my_blob_val := 'a blob string to be inserted';
   query := 'INSERT INTO A_TABLE (BLOB_FIELD) VALUES(' + my_blob_val + ')';
   // to execute a query....
end;
occours的问题是字符串到blob的转换

那么如何在数据库间blob字段中插入字符串呢?

如下所示:

procedure INSERT_BLOB_QUERY;
begin
  query.SQL.Text := 'INSERT INTO A_TABLE (BLOB_FIELD) VALUES (:VAL)';
  query.ParamByName('VAL').AsString := 'a blob string to be inserted';
end;
您的代码无法工作,因为您没有将字符串作为参数传递,而是将其作为查询的一部分传递。如果这样做,显然需要引用它:Interbase将尝试将其解释为SQL命令,而不是插入db列中的文本字符串

尽管如此,不要去引用。使用参数总是更好,更安全

像这样:

procedure INSERT_BLOB_QUERY;
begin
  query.SQL.Text := 'INSERT INTO A_TABLE (BLOB_FIELD) VALUES (:VAL)';
  query.ParamByName('VAL').AsString := 'a blob string to be inserted';
end;
您的代码无法工作,因为您没有将字符串作为参数传递,而是将其作为查询的一部分传递。如果这样做,显然需要引用它:Interbase将尝试将其解释为SQL命令,而不是插入db列中的文本字符串


尽管如此,不要去引用。使用参数总是更好,更安全

安全警报:)-查找“SQL注入”或阅读@mjn:虽然我同意SQL注入对于一个可以从互联网访问的数据库来说是一件值得担心的事情,但问题是什么让你认为okami的数据库几乎暴露在互联网上?大多数数据库都在防火墙、局域网访问限制和域安全的保护下生活。okami所展示的代码很可能是一个受到良好保护的n层解决方案的一部分。无论是否连接到web,良好实践始终是良好实践:@Marjan当通过LAN(或防火墙后)而不是直接从Internet访问数据库时,您怎么会认为SQL注入不存在风险?防火墙对SQL注入有什么样的保护?@Marjan他们会有其他方法,但为什么让SQL注入大门敞开着呢?。。。从安全的角度来看,您必须检测并尽可能地关闭系统中的任何漏洞。安全警报:)-查找“SQL注入”或阅读@mjn:虽然我同意SQL注入对于可从internet访问的数据库来说是一件值得担心的事,问题中的什么让你认为okami的数据库几乎暴露于互联网?大多数数据库都在防火墙、局域网访问限制和域安全的保护下生活。okami所展示的代码很可能是一个受到良好保护的n层解决方案的一部分。无论是否连接到web,良好实践始终是良好实践:@Marjan当通过LAN(或防火墙后)而不是直接从Internet访问数据库时,您怎么会认为SQL注入不存在风险?防火墙对SQL注入有什么样的保护?@Marjan他们会有其他方法,但为什么让SQL注入大门敞开着呢?。。。从安全角度来看,你必须检测并尽可能地关闭系统中的任何漏洞
query.SQL
是一个
TStringList
,因此您需要使用
query.SQL.Text
+1,虽然。一个小的挑剔
query.SQL
是一个
TStringList
,因此您需要使用
query.SQL.Text
+1,尽管如此。