为什么在PHP/MySQL中会出现SQLSTATE42000错误

为什么在PHP/MySQL中会出现SQLSTATE42000错误,php,mysql,xampp,localhost,Php,Mysql,Xampp,Localhost,我正在做一个使用PHP和MySQL的项目 我有一个HTML表,它有3列,我从MySQL中的“任务”表将数据加载到其中。这些列包括:id、taskname和一个按钮列,单击该按钮列可将您带到相关任务的Edit页面(我将任务id作为URL传递)-http://localhost/tasks/?edit&id=3 当我尝试加载有关此任务的详细信息时,问题就出现了。代码如下: if(isset($_GET["id"])) { try { $sq

我正在做一个使用PHP和MySQL的项目

我有一个HTML表,它有3列,我从MySQL中的“任务”表将数据加载到其中。这些列包括:
id
taskname
和一个按钮列,单击该按钮列可将您带到相关任务的
Edit
页面(我将任务id作为URL传递)-
http://localhost/tasks/?edit&id=3

当我尝试加载有关此任务的详细信息时,问题就出现了。代码如下:

if(isset($_GET["id"]))
    {
        try
       {
           $sql = "SELECT * FROM tasks WHERE id = :id";
           $result = $pdo->prepare($sql);
           $result->bindValue(":id", $_GET["id"]);
           $result = $pdo->query($sql);
       }
       catch(PDOException $e)
       {
          $error = "Error trying to load task - " . $e->getMessage();
          include "error.php";
          exit();
        }

        foreach($result as $task)
        {
           $tasktext = $task["task"];
           $id = $task["id"];
        }

        $title = "Edit task";    
            $action = "edittask";
            $button = "Edit task";
            include 'form.php';
    exit();
    resetParameters();
我得到以下错误:

尝试加载任务时出错-SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“:id”附近使用的正确语法

例如,当我将
其中id=:id
替换为
其中id=3
时,它可以工作并加载有关任务的详细信息,但我无法让它加载有关我在上一屏幕中单击的任务的详细信息

是否有人能发现我的代码/逻辑有任何错误,并为我指出正确的方向?

在使用准备好的查询时,您需要使用not:

  • PDOStatement::execute-执行准备好的语句
  • 查询-执行SQL语句
尝试:



谢谢您的帮助。它起作用了!那么为什么我用3替换:id时它会起作用呢?因为query()用于原始查询,例如没有绑定参数。请理解,非常感谢您的帮助。我将在几分钟内接受答案,因为它不让我现在接受。NP,很高兴能提供帮助,我为这两种PDO方法的手册添加了一些链接。
<?php 
try
{
    $sql = "SELECT * FROM tasks WHERE id = :id";
    $query = $pdo->prepare($sql);
    $query->bindValue(":id", $_GET["id"]);
    $query->execute();
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e)
{
    $error = "Error trying to load task - " . $e->getMessage();
    include "error.php";
    exit();
}
?>