【发布时间】:2014-08-29 19:56:38
【问题描述】:
odbc_prepare 语句有点新,在尝试执行需要日期时间输入参数的存储过程时遇到问题。
如果我要使用 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 的情况下可以正常工作。除了更改存储过程的输入类型之外,还有其他解决方法吗?
【问题讨论】:
标签: php sql-server datetime stored-procedures odbc