SQL语法错误:无法正确提交表单

时间:2014-08-28 01:56:13

标签: php sql forms pdo

我提交表单后收到此错误。由于我还没有太多使用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 个答案:

答案 0 :(得分: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驱动程序。


建议:使用交易。逐个执行每个语句,最后提交/回滚取决于您的需求。