【问题标题】:How to use WHERE ID in sql Parameters如何在 sql 参数中使用 WHERE ID
【发布时间】:2016-11-22 01:57:25
【问题描述】:

我有以下几点:

somequery.SQL.Add('UPDATE `someDBname`.`someTABLEname` SET

`client`='''+someForm.Edit1.Text+''', 
`phone`='''+someForm.Edit2.Text+''', 
`email`='''+someForm.Edit3.Text+''', 
`details`='''+someForm.Edit4.Text+''', 
`specials`='''+someForm.Edit5.Text+''', 
`price`='''+someForm.Edit6.Text+''', 
`address`='''+someForm.Edit7.Text+''',
`deadline`='''+someForm.DateTimePicker1.DateTime+''',
`status`='''+someForm.Edit9.Text+''' 

WHERE `id`=''' + inttostr(someDataSetid.Value) + ''';');

我想改用parameters,像这样:

someQuery.SQL.Clear;
someQuery.SQL.Add( 'UPDATE `someDBname`.`someTABLEname` ( client, phone, email, details, specials, price, address, deadline, status ) values ( :client, :phone, :email, :details, :specials, :price, :address, :deadline, :status ) ' ) ;
someQuery.Params.ParamByName( 'client' ).AsString := someForm.Edit1.Text ;
someQuery.Params.ParamByName( 'telefon' ).AsString := someForm.Edit2.Text ;
someQuery.Params.ParamByName( 'email' ).AsString := someForm.Edit3.Text ;
someQuery.Params.ParamByName( 'detalii' ).AsString := someForm.Edit4.Text ;
someQuery.Params.ParamByName( 'mentiuni' ).AsString := someForm.Edit5.Text ;
someQuery.Params.ParamByName( 'pret' ).AsString := someForm.Edit6.Text ;
someQuery.Params.ParamByName( 'livrare' ).AsString := someForm.Edit7.Text ;
someQuery.Params.ParamByName( 'deadline' ).AsDateTime := someForm.DateTimePicker1.DateTime ;
someQuery.Params.ParamByName( 'status' ).AsString := someForm.Edit9.Text ;
someQuery.ExecSQL(true);

我不知道如何将包含ID(第一个代码示例)的WHERE 子句转换为parameters(第二个代码示例) 还没有弄清楚,我似乎在谷歌上找不到关于如何在parameters 中使用WHERE 的示例。 我在使用参数方面还很陌生。

Params.ParamsByName( 'id' ) 之后我应该写什么 - 以获得 id?

服务器是MYSQL。 如果我遗漏了任何内容,请在 cmets 中告诉我,我会编辑

提前致谢!

【问题讨论】:

  • 您为什么认为可以从使用有效 SQL 更改为无效 SQL 以添加参数?你的第二个例子根本无效,有或没有参数。
  • @KenWhite 可能是因为我没有明白你显然做了什么,而且我还没有添加 where 我还没有测试任何东西。什么是无效的?
  • 第二个示例中 UPDATE 的整个语法是错误的。查看第一个中的 SQL 语句,然后在第二个中比较它(不带参数)。 (其实就是把代码复制出来,粘贴到记事本里,把SQL.Add('和结尾的');去掉再看。完全不一样,完全无效。切换到参数化语句时,不会改变 SQL 的整个语法。你仍然必须编写语法上有效的 SQL 语句;你不能只是在这个过程中创造一种新的语言。
  • @KenWhite - 是的,我从 insert into 声明中复制粘贴了相同的东西,我用另一种形式添加东西,没有注意到差异并认为它会起作用,只是支付了访问sql w3学校,这对我来说更清楚了,谢谢指出。
  • @KenWhite - 你能提供一些关于 id 参数行应该是什么样子的信息吗?

标签: mysql sql parameters params sqlparameter


【解决方案1】:

很高兴您决定从字符串连接切换到参数绑定,但这并不意味着您可以更改 UPDATE 语法。你仍然受到documented syntax 的约束

'UPDATE `someDBname`.`someTABLEname` SET client=:client, phone=:phone, email=:email, details=:details, specials=:specials, price=:price, address=:address, deadline=:deadline, status=:status WHERE id=:id';

这与您的第一个查询中的语法几乎相同,但您使用占位符而不是字符串连接。然后你把参数一一绑定

someQuery.Params.ParamByName( 'client' ).AsString := someForm.Edit1.Text ;
someQuery.Params.ParamByName( 'telefon' ).AsString := someForm.Edit2.Text ;

【讨论】:

  • 您好,感谢您的回答!我很难完全理解这一点。这意味着我必须放弃 Parameter 行并使用您所说的占位符?此外,在您链接示例的页面上,列出了您的示例没有的几件事(例如 [ 和 some ,并且没有空格)。我猜这是令人困惑的部分。介意写一个关于我的特定代码应该是什么样子的完整示例吗?看完后我会更好地理解它
  • 请查看更新。占位符的含义是 :client, :phone 等,您在查询中已经有了。但请注意,您的正确句法不正确,这是我在回答中指出的
  • 哦,我明白了。刚查了sql w3 school,也注意到了不同之处,那么下面似乎是正确的,你能确认一下吗? ( 'UPDATE `someDBname`.`someTABLEname` SET client=:client, phone=:phone, email=:email, details=:details, specials=:specials, price=:price, address=:address, deadline=:deadline, status=:status WHERE id=:id' ) ; 如果是这样,我假设我需要添加的只是 ID 的参数行,这是我最初的问题的一部分,因为我根本无法弄清楚它应该是什么样子。 (出于完全相同的原因,我的第二个代码示例中也缺少它)
  • 是的,差不多就是这样。不太确定参数是如何在您的语言中绑定的(您尚未指定,但您的原始答案或someQuery.Params.ParamByName( ':pret' ) 中的某些内容会起作用。(请注意新添加的:
  • 我正在使用 Delphi - Rad Studio 10 Seattle。感谢您的编辑/回复 - 我会试试的
猜你喜欢
  • 2019-10-06
  • 1970-01-01
  • 2014-02-09
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2022-11-18
相关资源
最近更新 更多