我在sqlsrv 2008上使用PHP 7,使用PDO sqlsrv,并创建一个插入函数,如下所示:
public function insert($table, $values,$error_msg = "Error executing query."){
try {
$vals = array($values);
$fieldnames = array_keys($vals[0]);
$sql = "INSERT INTO ".$table;
foreach ($fieldnames as $key => $value1) {
$fieldnames[$key] = '`'.$value1.'`';
}
$fields = "( ".implode(" ,", $fieldnames)." )";
$bound = "(:" .implode(", :", str_replace('`', '', $fieldnames))." )";
$sql .= $fields." VALUES ".$bound;
$this->query = $this->conn->prepare($sql);
$error_msg=$sql.json_encode($vals);
foreach ($vals as $val) {
$this->query->execute($val) or die('Error Code: '.$error_msg);
$this->rowcount=$this->query->rowCount();
}
} catch (PDOException $e) {
echo ('There was a problem with inserting to database: ' .$e->getMessage());
}
}但是当我像这样调用这个函数时:
$sql = array('ppic_mo' => $manufacturing_order_no,
'work_area' => $work_area,
'item_number' => $item_number,
'item_description' => $item_description,
'machine_no' => $machine_no,
'quantity' => $quantity,
'material_required' => $material_required,
'date_from' => $date_from,
'date_to' => $date_to
);
$conn->insert('ppic_ps',$sql,"0125181711");我发现了一个错误:
插入数据库时出现了一个问题: SQLSTATE42000: MicrosoftSQL ServerIncorrect语法在“`”附近。
我试着像这样使用本机插入,它运行得很好。
$query = "INSERT INTO ppic_ps(ppic_mo,work_area,item_number,item_description,machine_no,quantity,material_required,date_from,date_to) VALUES (?,?,?,?,?,?,?,?,?)";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(1,$manufacturing_order_no);
$stmt->bindParam(2,$work_area);
$stmt->bindParam(3, $item_number);
$stmt->bindParam(4, $item_description);
$stmt->bindParam(5,$machine_no);
$stmt->bindParam(6,$quantity);
$stmt->bindParam(7, $material_required);
$stmt->bindParam(8,$date_from);
$stmt->bindParam(9, $date_to);
$stmt->execute();知道为什么会这样吗伙计们?
发布于 2018-01-26 03:44:58
我已经通过消除中的
foreach ($fieldnames as $key => $value1) {
$fieldnames[$key] = '`'.$value1.'`';
}因为server在字段有时不执行查询,但是MySql执行。例如,在MySql中,此查询运行:
INSERT INTO tablename(`field1`,`field2`) VALUES(?,?)但在Server 2008中,in不运行。
https://stackoverflow.com/questions/48454830
复制相似问题