gpt4 book ai didi

mysql - Delphi Mysql存储过程单引号问题

转载 作者:行者123 更新时间:2023-11-29 00:41:40 24 4
gpt4 key购买 nike

我有带有 mydac 存储过程组件的 Delphi 应用程序,它采用 utf8 编码的 xml 文件的内容作为字符串参数。当我将此 xml 内容从文件复制粘贴到程序时,它可以与 navicat 和其他数据库管理程序一起使用

CALL sp_saveit('<xml>garry&#39;s<otherdata> data data....</xml>);

但是当我尝试从 delphi 调用它时它会抛出错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CALL sp_saveit('<?xml version=\"1.0\" encoding="UTF-8"?><Main><Detail z') at line 1

正在执行这些步骤:

  1. delphi 使用 LoadfromFile MyStream.LoadFromFile(Sp_xmlfile); 查找文件内容并将其读取到 TStringStream 中;
  2. 然后将内容传递给存储过程 T_ContentsSP.ParamByName('XmlFile').AsWideString := MyStream.DataString;

我还尝试使用 delphi 的 zlib 压缩此数据并作为 blob 发送,我尝试将 ' 更改为 ' 但结果相同。

如何使用delphi发送一个带有单引号和双引号的长字符串作为sp的参数?

p.s:对不起我的英语。

最佳答案

从你的帖子中,我看到你试图使用一个常量值(我把这个 xml 内容复制粘贴)和一个参数(T_ContentsSP.ParamByName('XmlFile'))。此外,尝试为您使用的命令显示错误文本,而不是为其他命令显示错误文本。

当你使用参数时,你不需要做任何特殊的准备。数据访问组件透明地将参数值发送到 DBMS。如果他们有跟踪输出,那么检查跟踪,哪个库正在发送到 DBMS。参数用法总是优先于文字用法!

当你使用常量时,你应该(more):

  • 将常量内的每个单引号加倍,并在其前面加上“\”。因此,' 将变为 \''
  • 双引号不需要特殊处理。
  • 可能会禁用宏处理,因为“&”可能是数据访问库中的宏说明符。

关于mysql - Delphi Mysql存储过程单引号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12024230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com