【问题标题】:SQL syntax error: can't submit form correctlySQL 语法错误:无法正确提交表单
【发布时间】:2014-10-21 18:28:43
【问题描述】:

我在提交表单后收到此错误。由于我还没有过多地使用 PDO,所以我的代码可能有明显的错误。它旨在用表单数据更新表格并读取它。我该如何解决?

错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'UPDATE edit SET content=':bodyBackgroundColour' WHERE id='bodyBackgroundColour';' 附近使用正确的语法在第 2 行

try
{
    $database = new PDO ('mysql:host=localhost;dbname=youdonotneedtoknow;charset=utf8', 'youdonotneedtoknow', 'youdonotneedtoknow');
    $database -> setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $database -> setAttribute (PDO::ATTR_EMULATE_PREPARES, false);

    //Update
    if (!empty ($_POST))
    {
    $statement = $database -> prepare ("
    UPDATE edit SET content=':windowTitle' WHERE id='windowTitle';
    UPDATE edit SET content=':bodyBackgroundColour' WHERE id='bodyBackgroundColour';
    UPDATE edit SET content=':divisionBackgroundColour' WHERE id='divisionBackgroundColour';
    ");
    $statement -> execute (array (
    ':windowTitle' => $_POST ['windowTitle'],
    ':bodyBackgroundColour' => $_POST ['bodyBackgroundColour'],
    ':divisionBackgroundColour' => $_POST ['divisionBackgroundColour'],
    ));
    }
}
catch (PDOException $exception)
{
    die ('Error: ' . $exception -> getMessage () . '<br><br>' . 'Por favor diríjase a "index.php" en este mismo directorio y contacte a su administrador.');
}

【问题讨论】:

  • +1 你不需要知道
  • 删除占位符周围的引号。占位符在内部进行解析,并在必要时为字符串等添加引号。
  • 你确定:bodyBackgroundColour的值不为空吗?
  • 您关闭了PDO::ATTR_EMULATE_PREPARES,但尝试准备多个查询。见this。
  • @PrabowoMurti 我很确定不是。

标签: php sql forms pdo


【解决方案1】:

代码中有2个错误。

#1

占位符不需要用引号括起来。因此声明应该是:

UPDATE edit SET content=:windowTitle WHERE id='windowTitle';
UPDATE edit SET content=:bodyBackgroundColour WHERE id='bodyBackgroundColour';
UPDATE edit SET content=:divisionBackgroundColour WHERE id='divisionBackgroundColour';

#2

执行语句需要 PDO::ATTR_EMULATE_PREPARES 设置为 1 或 true。此外,它需要 PHP 5.3+ 和 mysqlnd 驱动程序。


建议:使用交易。一个一个地执行每个语句,最后提交/回滚取决于你的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多