我不理解“php pdo错误处理程序”的错误

我不理解“php pdo错误处理程序”的错误,php,mysql,pdo,Php,Mysql,Pdo,我正在更新我的帖子。我认为我的代码中没有错误。我几乎什么都试过了。但它仍然显示了这个错误 未捕获PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以了解在C:\xampp\htdocs\x\edit.php:4堆栈跟踪:0 C:\xampp\htdocs\x\edit.php4:PDO->query'SELECT*FROM p 我做错了什么 $id = $_GET["id"]; $sql =

我正在更新我的帖子。我认为我的代码中没有错误。我几乎什么都试过了。但它仍然显示了这个错误

未捕获PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以了解在C:\xampp\htdocs\x\edit.php:4堆栈跟踪:0 C:\xampp\htdocs\x\edit.php4:PDO->query'SELECT*FROM p

我做错了什么

$id = $_GET["id"];
$sql = $database->query("SELECT * FROM post WHERE id=$id");
$sql->setFetchMode(PDO::FETCH_ASSOC);
foreach ($sql as $x) {
    $post_id = $x["id"];        
    $post_title = $x["post_title"];     
    $post_text = $x["post_text"];               
}

if (isset($_POST["update_post"])) {
    $new_post_title = $_POST["itemName"]."[UPDATED]";
    $new_post_text  = $_POST["itemInfo"];
    try {
        $u_post = $database->prepare("UPDATE post SET post_title=:p_title,post_text=:p_text WHERE id=$id");
        $u_post->execute(array(":p_title"=>$new_post_title,":p_text"=>$new_post_text));
        if ($u_post) {
            header("location:showpost.php");
        }else {
            echo "Failed";
        }
    } catch (Exception $e) {
        print $e->getMessage();
    }
}

这意味着SQL查询的某些内容不是有效的MySQL语法。因此,SQL引擎无法理解如何执行它。也许给我们看看SQL,我们可以帮你。让我添加代码。错误在于查询调用,而不是prepare。您还应该绑定$id。您需要添加选择代码,而不是更新代码。好的,再次感谢。问题可能是$id未填充或具有无效值,例如,它是字符串而不是int。同样,您应该将其作为参数传递。目前,您的代码容易受到SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释。您已经知道如何使用参数,因此每次都需要使用它们。切勿将未初始化的数据直接插入SQL。