错误' SQLSTATE [22018]:只在某些时候发生日期

时间:2017-07-20 12:46:35

标签: php jquery sql-server ajax pdo

我有一个在Ajax请求中执行的PDO声明,但它在大约75%的时间内都有效。

  

例外' PDOException'消息' SQLSTATE [22018]:无效   转换规范的字符值:0 [Microsoft] [ODBC Driver 11   for SQL Server]转换规范的字符值无效   (在ext \ pdo_odbc \ odbc_stmt.c:254中的SQLExecute [0])'在   C:\瓦帕\ WWW \定时器\ class.db.php:102

     

0 C:\ wamp \ www \ Timer \ class.db.php(102):PDOStatement-> execute()

     

1 C:\ wamp \ www \ Timer \ insertRecord.php(16):Queries-> insertNewOvenRecord(' 2017-07-20',' PC-2', ' Rack_NR',' 8',' 9100501',' PWW',' 8:22:51',& #39; 0&#39)

     

2 {main}

这是我的PDO功能

public function insertNewOvenRecord($date,$oven,$rack,$trayID,
                                    $material,$enteredBy,$start_time,
                                    $dblCure) 
{
    $stmt = $this->conn->prepare("EXECUTE STR_EnterNewOvenRecordSp ?, ?, ?, ?, ?, ?, ?, ?");

    $stmt->bindParam(1,$date,PDO::PARAM_STR);
    $stmt->bindParam(2,$oven,PDO::PARAM_STR);
    $stmt->bindParam(3,$rack,PDO::PARAM_STR);
    $stmt->bindParam(4,$trayID,PDO::PARAM_STR);
    $stmt->bindParam(5,$material,PDO::PARAM_STR);
    $stmt->bindParam(6,$enteredBy,PDO::PARAM_STR);
    $stmt->bindParam(7,$start_time,PDO::PARAM_STR);
    $stmt->bindParam(8,$dblCure,PDO::PARAM_STR);
    $stmt->execute();
}

这是我的php回复

include('db_connect.php');
include('class.db.php');
$queries = new Queries($pdo);
$date = date('Y-m-d');
$oven = $_POST['oven'];
$rack = $_POST['rack'];
$tray = $_POST['tray'];
$item = $_POST['item'];
$enteredBy = $_POST['enteredBy'];
$start_time = $_POST['time'];
$dblCure = $_POST['dblCure'];
try {
     $queries->insertNewOvenRecord($date,$oven,$rack,$tray,
                                   $item,$enteredBy,$start_time,
                                $dblCure);

}
catch(PDOException $e)
{
    echo ($e->getMessage());
}

我知道问题在于日期变量,但是,我不理解为什么它在某些时候会起作用,而在其他时候也不会。或者问题的根本原因是什么。任何人都可以帮助我吗?

列类型:

Date date 
end_time datetime 
enteredBy nvarchar(3) 
equipName nvarchar(30) 
material nvarchar(30) 
start_time datetime 
storageBayName nvarchar(30) 
sublevelID int

1 个答案:

答案 0 :(得分:0)

我相信我发现了这个问题,但是我仍然需要测试它一段时间以确保它正常工作。我将sql server中的数据类型从time更改为nvarchar,然后对字符串进行了转换。似乎工作正常。