如何跳过mysql保留字(批量文本)

时间:2017-02-17 15:45:54

标签: php mysql

我有错误: (SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请查看与您的MariaDB服务器版本对应的手册,以便在'sa immoderate-immoderate-fine boy'附近使用正确的语法WHERE id ='4''在第1行)

我实际上是尝试使用下面的方法通过循环来修改和保存批量文本,但问题是我在处理几个文本后得到上面的错误。因为我发现mysql保留字在循环上批量文本时得到匹配。如何在没有mysql保留字冲突问题的情况下修改我的方法来处理批量文本。什么是解决方案?

文字更新方法:

public function update_des($id,$des){
        try
        {
            $stmt = $this->conn->prepare("UPDATE products SET des='$des' WHERE id='$id'");
            $stmt->execute();
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }

    }

4 个答案:

答案 0 :(得分:1)

你的问题似乎与保留字无关,但似乎你有引号(或特殊字符)的问题,以避免这种情况你可以使用绑定。

 public function update_des ($id, $des)
 {
      try
      {
           $stmt = $this->conn->prepare("UPDATE products SET des=:des WHERE id=:id");
           $stmt->bindParam(':des', $des, PDO::PARAM_STR);
           $stmt->bindParam(':id', $id, PDO::PARAM_INT);
           $stmt->execute();
      }
      catch (PDOException $e)
      {
           echo $e->getMessage();
      }
 }

答案 1 :(得分:0)

使用准备好的陈述:

public function update_des($id,$des){
   try {
       $stmt = $this->conn->prepare("UPDATE products SET des=:des WHERE id=:id");
       $stmt->bindValue(':des', $des);
       $stmt->bindValue(':id', $id, PDO::PARAM_INT);
       $stmt->execute();
   } catch(PDOException $e)  {
      echo $e->getMessage();
   }

}

答案 2 :(得分:0)

您还可以使用带有数组的预准备语句。

public function update_des($id,$des){
    try
    {
        $stmt = $this->conn->prepare("UPDATE products SET des=? WHERE id=?");
        $stmt->execute([$id, $des]);
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }

}

没有额外的代码行。只需确保维护顺序以确保参数匹配。

答案 3 :(得分:0)

我不明白为什么这里的所有答案都是一样的 - 在函数中回显。 不要回声功能。调用者应该抓住并处理问题。

/**
 * @param int|string $id
 * @param string     $des If you do not use meaningful var names you have to write
 *                        a lot of documentation.
 *
 *
 * @return bool
 * @throws PDOException
 */
public function update_des($id, $des)
{
    $stmt = $this->conn->prepare(
        "UPDATE `products` SET `des` = :des WHERE `id` = :id"
    );
    return $stmt->execute(['des' => $des, 'id' => $id]);
}

try {
    $myObject->update_des(1, 'foo');
} catch (PDOException $e) {
    echo $e->getMessage();
}

我猜你使用的是PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,所以你会得到真的或PDOException随叫随到。