0

我正在开发一个使用 PHP 和 MySQL 的项目。

我有一个包含 3 列的 HTML 表,我从 MySQL 中的“任务”表中加载数据。这些列是:idtaskname一个按钮列,单击该按钮列时,会将您带到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();

我收到以下错误:

Error trying to load task - SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':id' at line 1

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

任何人都可以发现我的代码/逻辑有什么问题并指出我正确的方向吗?

4

1 回答 1

0

使用准备好的查询时,您需要使用execute()而不是query()

  • execute() PDOStatement::execute — 执​​行准备好的语句。
  • query() PDO::query — 执行 SQL 语句。

尝试:

<?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();
}
?>
于 2013-07-14T15:55:47.970 回答