PHP UPDATE MSDB datetime memo 请帮我不要发疯

Posted

技术标签:

【中文标题】PHP UPDATE MSDB datetime memo 请帮我不要发疯【英文标题】:PHP UPDATE MSDB datetime memo Please Help me not go crazy 【发布时间】:2011-09-19 23:55:31 【问题描述】:

php 中,我使用 ODBC 连接到访问数据库。我更新了几个字段没问题,但我很难让其中两个工作。

第一个是访问中的日期/时间类型。

第二个是memo in access的类型。

$mdbFilename = "pathTo.mdb";
$cimdb = odbc_connect("Driver=Microsoft Access Driver (*.mdb);Dbq=$mdbFilename", $user, $password);

$sqlInsert = "UPDATE MyTable ";
$sqlInsert .= "SET ";
$sqlInsert .= "Time='07:30:00 AM', ";
$sqlInsert .= "Note='My really long note here...' ";
$sqlInsert .= " WHERE ID=777";
$res = odbc_exec($cimdb, $sqlInsert);

代码产生.....

UPDATE MyTable SET Time='07:30:00 AM', Note='My really long note here...' WHERE ID=555  

我尝试了很多东西,从转换到转换,再到不同类型的间距/格式。我真的希望以前有人这样做过。

我真正需要知道的是我将数据放入什么格式以使访问数据库接受输入?

这是它抛出的错误...

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement., SQL state 37000 in SQLExecDirect in H:\web\count\countInject.php on line 116
SQL statement failed with error: 37000: [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement.

非常感谢您阅读本文,如果您能帮助我,非常感谢=)

【问题讨论】:

你的长引用中是否有可能是 ' 标记?您应该查看***.com/questions/574805/… 以了解转义字符串的“丑陋” mssql 解决方案。 不,这实际上是我用来测试 MEMO 字段的字符串。没什么特别的,在我弄清楚如何将一个非常简单的字符串转换为 MEMO 数据类型之后,我可以修复/保护特殊垃圾。 在'Note'中添加方括号修复了它 $sqlInsert .= "[Note]='My really long note here...' "; 【参考方案1】:

在调试时,我发现将问题分解成尽可能小的块很有帮助。例如,是否可以将日期时间更新与备忘录更新分开,以确保解决正确的问题。

对于 Access 日期时间值,它需要格式为 #yyyy-mm-dd HH:MM:SS# from Formatting Date Time Values for Access SQL 忽略 delphi 位,只需将其转换为 PHP。

对于备忘录来说,看起来并没有什么真正的特殊技巧。但是,您可能会在源代码中遇到未转义的括号。

【讨论】:

如果这些是真实的字段名称,则 OP 会遇到保留字 (office.microsoft.com/en-us/access-help/…)。这些需要用方括号括起来。 感谢您的回复! =) 我正在分别处理这两个问题。让我们假设我的 PHP 是黄金,看看它产生的 SQL。 (坦率地说,我现在只是把它直接放在测试这些字段中) 这是我尝试过的语句...UPDATE CountData SET Time='#2000-01-01 01:00:00#' WHERE CountID=555 UPDATE CountData SET Time=#2000-01-01 01:00:00# WHERE CountID=555 UPDATE CountData SET Time='2000-01-01 01:00:00' WHERE CountID=555 UPDATE CountData SET Time=2000-01-01 01:00:00 WHERE CountID=555 每个人仍然给我:UPDATE语句中的语法错误。,SQLExecDirect中的SQL状态37000 @Remou 谢谢!现在我得到了一个类型不匹配,所以部分解决了,现在正在处理它,我会让大家知道最终结果。 好的,我用$sqlInsert .= "[Time]='01:00:00', ";修复了时间

以上是关于PHP UPDATE MSDB datetime memo 请帮我不要发疯的主要内容,如果未能解决你的问题,请参考以下文章

Bigint 到日期时间

在 UPDATE 查询中使用 DateTime 或字符串参数时,Informix 11.7 返回 -1 作为受影响的行数

pymysql插入datetime类型

实体框架未声明 datetime.now 为空

sqlserver2000 msdb 置疑

从“MSDB”系统表中读取数据