我有错误: (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();
}
}
答案 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
随叫随到。