Odbc_prepare用于带有日期时间输入参数的过程


odbc_prepare for procedure with datetime input parameters

对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);

返回以下错误:

Warning: odbc_execute(): SQL error: [Microsoft][ODBC SQL Server . sh转换规范中无效的字符值,SQL状态22005在SQLExecute

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

为调用过程使用正确的ODBC语法,并为日期时间使用正确的语法,这可能会使您更进一步。调用语法是{call procname(arguments)}。日期时间语法为{ts "} -参见日期、时间和时间戳转义序列和ODBC日期时间格式