6

PDO を使い始めようとしていますが、問題が発生しています。これが私の元のコードです:

    $query = "
              UPDATE `products` 
              SET `product_qty` = '{$_GET['product_qty']}'
              WHERE `product_id` = '{$_GET['product_id']}'
    ";

    mysql_query($query) or die(mysql_error());

それはうまくいきますが、それを PDO 構文に変換しようとすると:

    $db->prepare('
    UPDATE products 
    SET product_qty = :product_qty
    WHERE product_id = :product_id
    ');

    try 
    {
        $db->execute(array(':product_qty' => $_GET['product_qty'], ':product_id' => $_GET['product_id']));
    }
    catch (PDOException $e) 
    {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }

エラーが発生します:

致命的なエラー: 未定義のメソッド PDO::execute() への呼び出し ...


私の最初の PDO クエリが機能するように誰か助けてくれませんか?

4

4 に答える 4

5

はメソッドを持つ$db->prepare()a を返します。PDOStatementexecute()

$stmt = $db->prepare('UPDATE products 
    SET product_qty = :product_qty
    WHERE product_id = :product_id');

$stmt->execute(array(
    ':product_qty' => $_GET['product_qty'], 
    ':product_id' => $_GET['product_id']
));
于 2012-07-04T16:07:16.537 に答える
4

$db->prepare()オブジェクトを返しPDOStatementます。execute()ではなく、それを呼び出す必要があります$db

于 2012-07-04T16:07:15.943 に答える
1

例を参照してください...準備はステートメントを作成し、それはあなたがexecute()を実行することです...

<?php
/* Execute a prepared statement by passing an array of insert values */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->execute(array(':calories' => $calories, ':colour' => $colour));
?>
于 2012-07-04T16:08:54.180 に答える
1

を呼び出すと がprepare返されます。PDOStatement必要なのはこれですexecute。次のことを試してください。

$sth = $db->prepare('
  UPDATE products 
  SET product_qty = :product_qty
  WHERE product_id = :product_id
');

$sth->execute(array(':product_qty' => $_GET['product_qty'], ':product_id' => $_GET['product_id']));
于 2012-07-04T16:09:34.710 に答える