簡體   English   中英

SQLSTATE [42000]:[Microsoft] [用於SQL Server的ODBC驅動程序13] [SQL Server]'`'附近的語法不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM