0

PHP と MySQL を使用するプロジェクトに取り組んでいます。

MySQL の「タスク」テーブルからデータをロードする 3 つの列を持つ HTML テーブルがあります。列は次のとおりです: 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 = :idWHERE id = 3、タスクに関する詳細が機能してロードされますが、前の画面でクリックしたタスクに関する詳細をロードすることはできません。

誰かが私のコード/ロジックの問題を見つけて、正しい方向に向けてくれませんか?

4

1 に答える 1

0

準備されたクエリを使用する場合は、 query()ではなくexecute()を使用する必要があります。

  • 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 に答える