![](/img/trans.png)
[英]Failed to run query: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ')'
[英]SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '`'
我在使用PDO sqlsrv的SQL Server 2008上使用PHP 7,並為插入創建了一個函數,如下所示:
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");
我收到此錯誤:
插入數據庫時出現問題:SQLSTATE [42000]:[Microsoft] [SQL Server的ODBC驅動程序13] [SQL Server]'`'附近的語法不正確。
我試圖像這樣使用本機插入,並且完全可以正常工作。
$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();
知道為什么會這樣嗎?
我已經通過消除``中的
foreach ($fieldnames as $key => $value1) {
$fieldnames[$key] = '`'.$value1.'`';
}
因為當字段具有``時SQL服務器不會執行查詢,但是MySql會執行查詢。 例如,在MySql中,此查詢運行:
INSERT INTO tablename(`field1`,`field2`) VALUES(?,?)
但在SQL Server 2008中無法運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.