如何解决MySQL错误问题?

时间:2017-09-15 08:19:08

标签: php mysql

我的查询是,

update test set testname='Women's education' where id = 123

我收到此错误

  

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用

任何人都可以解决我的问题

4 个答案:

答案 0 :(得分:1)

update test set testname="Women's education" where id = 123

如果你有'值

,请使用“”

答案 1 :(得分:1)

SQL需要转义撇号。您的代码应该为您执行此操作:

<?php
  $dbh=mysqli_connect("db_host","db_user","db_pass","db_name");
  $update_str = $_POST['testname']; # "Women's education"
  $test = mysqli_real_escape_string($dbh, $update_str);
  $sql="UPDATE test (testname) VALUES ('$update_str')";

  if (!mysqli_query($dbh,$sql)) {
    die('Error: ' . mysqli_error($dbh));
  }
  echo "1 record updated";
  mysqli_close($dbh);
?>

答案 2 :(得分:0)

update test set testname="Women's education" where id = 123

试试这个或:

  update test set testname="Women`s education" where id = 123

答案 3 :(得分:0)

在这种情况下,&#39;没有逃脱。这可以使用两个单引号进行转义,因为其他答案已经指出。

在现实世界的示例中,要设置的字符串可能是动态的。在这种情况下,我建议您使用SQL-Driver的escape-function为您转义字符串。这另外可以防止SQL注入。根据您的SQL驱动程序,这样的查询可以是这样的:

库MySQLi:

mysqli_query("update test set testname = '".mysqli_real_escape_string($value)."' where id = ".(int)$id);

$db->query("update test set testname = '".$db->real_escape_string($value)."' where id = ".(int)$id);

PDO:

$db->query("update test set testname = ".$db->quote($value)." where id = ".(int)$id);

(int)$ id将变量$ id解析为整数,因此也阻止了SQL-Injection。