带有datetime输入参数的过程的odbc_prepare

时间:2014-07-08 22:48:14

标签: php sql-server datetime stored-procedures odbc

odbc_prepare语句有点新,在尝试执行需要datetime输入参数的存储过程时出现问题。

如果我使用odbc执行而不使用下面显示的预准备语句,我没有问题......

$dblink = db_connect();
$query = "EXEC dbo.[ProcedureName] '" . $dateinput . "'";
odbc_exec($dblink, $query);

使用odbc_prepare我收到错误(仅适用于具有DateTime输入参数的过程)。以下示例......

function execute_db($dblink, $query, $params){
   $n = sizeof($params);
   for($i=0; $i<$n; $i++){
        if($i != 0){
            $query = $query . ', ?';
        }
        else{
            $query  = $query . ' ?';
        }
    }

    $statement = odbc_prepare($dblink, $query);
    odbc_execute($statement, $params);

    return $statement;
}

$dblink = db_connect();
$query = "EXEC dbo.[ProcedureName]";
$params = array($dateinput);

$result = execute_db($dblink, $query, $params);

这会返回以下错误:

  

警告:odbc_execute():SQL错误:[Microsoft] [ODBC SQL Server   驱动程序]转换规范的无效字符值,SQL状态22005   在SQLExecute中

我传入的日期字符串是'mm / dd / yyyy'格式,并且在不使用prepare的情况下工作正常。除了更改存储过程的输入类型之外,还有其他解决方法吗?

1 个答案:

答案 0 :(得分:1)

使用正确的ODBC语法来调用过程并使用正确的语法来表示日期时间,它可能会让您更进一步。调用语法是{call procname(arguments)}。日期时间语法为{ts&#39;&#39;} - 请参阅Date, Time, and Timestamp Escape SequencesODBC Datetime Format