【问题标题】:"Syntax error or access violation" when inserting dates using PDO and SQL Server使用 PDO 和 SQL Server 插入日期时出现“语法错误或访问冲突”
【发布时间】:2015-08-12 13:15:19
【问题描述】:

我正在尝试使用 PHP 中的 PDO 向 SQL Server 添加两个简单的字符串和一个日期。我目前正在使用以下代码:

$data = array(
    'Omschrijving' => 'Mijn mooie omschrijving...',
    'Toelichting' => 'Mijn leuke toelichting...'
);

# Insert data
$STH = $DBH->prepare("INSERT INTO memo (Datum, Omschrijving, Toelichting) VALUES (NOW(), :Omschrijving, :Toelichting)");
$STH->execute($data);

没有日期也可以完美运行,但由于某种原因,当我尝试添加日期时出现以下错误:

SQLSTATE[42000]:语法错误或访问冲突:8180 [FreeTDS][SQL Server]无法准备语句。 (SQLExecute[8180] 在 /builddir/build/BUILD/php-5.6.9/ext/pdo_odbc/odbc_stmt.c:254)

有谁知道我做错了什么?

提前致谢!

【问题讨论】:

  • @chris85 不,键不需要冒号,但它们可以。两种方式都有效
  • 感谢您关注@chris85,我已删除标签“MySQL”,它不适用。我正在使用 SQL Server。
  • 您检查过,您的列名和表名是否正确?
  • Now() 用于 mysql。 msdn.microsoft.com/en-us/library/ms188383.aspx@Rizier123 谢谢我不使用绑定并且看到了冲突的线程。
  • @Rizier123 是的,我已经检查过了。如果我不应该使用 NOW(),我应该使用什么?谢谢。

标签: php sql-server pdo timestamp


【解决方案1】:

Now() 是一个 MySQL 函数。 GetDate() 是 sql-server 的等价物。这是他们关于函数的文档,https://msdn.microsoft.com/en-us/library/ms188383.aspx

所以提供的代码应该变成:

$data = array(
    'Omschrijving' => 'Mijn mooie omschrijving...',
    'Toelichting' => 'Mijn leuke toelichting...'
);

# Insert data
$STH = $DBH->prepare("INSERT INTO memo (Datum, Omschrijving, Toelichting) VALUES (GETDATE(), :Omschrijving, :Toelichting)");
$STH->execute($data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2013-04-06
    • 2015-03-23
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多