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的情况下工作正常。除了更改存储过程的输入类型之外,还有其他解决方法吗?
答案 0 :(得分:1)
使用正确的ODBC语法来调用过程并使用正确的语法来表示日期时间,它可能会让您更进一步。调用语法是{call procname(arguments)}。日期时间语法为{ts&#39;&#39;} - 请参阅Date, Time, and Timestamp Escape Sequences和ODBC Datetime Format