2012-06-08 159 views
0

我试图用PDO更新MySQL中字段的值,我尝试过使用不同类型的预处理语句,但都没有工作。 这里是我的代码:PDO不会更新到MySQL

$table = $_POST['table']; 
    $field = $_POST['field']; 
    $value = $_POST['value']; 

    try{ 

     $available = "Available"; 
     $cero = 0; 

     $q = "UPDATE ? SET $available = $cero WHERE ? = ? "; 
     $stmt = $connection->getPdo()->prepare($q); 
     $stmt->execute(array ($table,$field,$value)); 

     echo true;  

    }catch(PDOException $exception){ 
     echo $exception; 
    } 

问题就迎刃而解了:

$q = "UPDATE $table SET $available = $cero WHERE $field = ? "; 
    $stmt = $connection->getPdo()->prepare($q); 
    $stmt->execute(array ($value)); 
+1

“*没有人工作*”不是一个有效的错误消息。你需要更具体。 –

+0

你可以使用绑定参数作为表名吗? – andrewsi

+0

@andrewsi号请参阅我的回答。 – DaveRandom

回答

2

不能使用?一个准备好的查询来代替表名,或任何对象名称(列,数据库等) 。参数化仅适用于值。你将不得不做的事:

$q = "UPDATE $table SET $available = $cero WHERE $field = ? "; 
$stmt = $connection->getPdo()->prepare($q); 
$stmt->execute(array ($value)); 

张女士说,你试图做到这表明你得到来自用户的输入,这是一个非常坏主意,即使你逃避它的表名。

+0

这不一定是不安全的。脚本可能会使用一些内部决策过程来决定要更新哪个表,而OP只是想为每个表编写一个可概化的查询,而不是单独的查询。我同意采取未经验证的用户输入的表名是一个坏主意...... – octern

+0

非常感谢你,我也不得不取代'?' 'WHERE'条款之后。 –

+0

感谢DaveRandom的反馈意见,最终查询结果如下: $ q =“UPDATE $ table SET $ available = $ cero WHERE $ field =?”; $ stmt = $ connection-> getPdo() - > prepare($ q); $ stmt-> execute(array($ value)); –