我提交表单后收到此错误。由于我还没有太多使用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.');
}
答案 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
驱动程序。
建议:使用交易。逐个执行每个语句,最后提交/回滚取决于您的需求。