2012-07-04 25 views
6

Estoy tratando de comenzar con PDO y estoy teniendo algunos problemas. Aquí está mi código original:Problema al usar PDO por primera vez

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

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

que funciona bien, pero cuando trato de traducir eso a DOP sintaxis:

$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(); 
    } 

me sale el error:

Fatal error: Call to undefined method PDO::execute() in ...


¿Podría alguien ayudarme a que mi primera consulta PDO funcione?

+6

Date un cambio de fecha para cambiar a DOP. – Mahn

Respuesta

5

$db->prepare() devuelve PDOStatement que tiene el método execute().

$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'] 
)); 
4

$db->prepare() devuelve un objeto PDOStatement. Debe llamar al execute() en eso, no en $db.

1

me refiero ya al ejemplo ... al preparar crea una declaración, y es que el que se ejecuta ejecutar() en ...

<?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)); 
?> 
1

La llamada a prepare devuelve un PDOStatement, es esto lo que necesita para execute. Pruebe lo siguiente:

$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'])); 
Cuestiones relacionadas