首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLSTATE[42000]:[Microsoft][用于Server的ODBC驱动程序13 ][Server]在“`”附近的错误语法

问SQLSTATE[42000]:[Microsoft][用于Server的ODBC驱动程序13 ][Server]在“`”附近的错误语法
EN

Stack Overflow用户
提问于 2018-01-26 02:03:10
回答 1查看 9.7K关注 0票数 0

我在sqlsrv 2008上使用PHP 7,使用PDO sqlsrv,并创建一个插入函数,如下所示:

代码语言:javascript
复制
  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());
                }
    }

但是当我像这样调用这个函数时:

代码语言:javascript
复制
        $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语法在“`”附近。

我试着像这样使用本机插入,它运行得很好。

代码语言:javascript
复制
  $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();

知道为什么会这样吗伙计们?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 03:44:58

我已经通过消除中的

代码语言:javascript
复制
foreach ($fieldnames as $key => $value1) {
       $fieldnames[$key] = '`'.$value1.'`';
}

因为server在字段有时不执行查询,但是MySql执行。例如,在MySql中,此查询运行:

代码语言:javascript
复制
INSERT INTO tablename(`field1`,`field2`) VALUES(?,?)

但在Server 2008中,in不运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48454830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档