我有一个在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
答案 0 :(得分:0)
我相信我发现了这个问题,但是我仍然需要测试它一段时间以确保它正常工作。我将sql server中的数据类型从time更改为nvarchar,然后对字符串进行了转换。似乎工作正常。