2012-03-05 143 views
1

嗨即时通过使用PDO来更新MySQL数据库的某些字段。我写了一个名为“bakeIT”的类,它连接到数据库并根据方法simple_update()的参数更新一些字段。数据库更新不起作用

不知何故第一实例调用BakeIT()->simple_update()是工作,但不是第二个?这是为什么?我得到的是真的疯了......

编辑: 我发现了一些错误:

string(85) "SQLSTATE[28000] [1045] Access denied for user 'ODBC'@'localhost' (using password: NO)" Fatal error: Call to a member function prepare() on a non-object in BakeIT.php

表如下所示:enter image description here

class BakeIT { 

    function simple_update(
    $tablename, 
    $fieldname, 
    $value, 
    $id, 
    $idname, 
    $token, 
    $tokenvalue){ 

     $conn=$this->connect_db(); 
     $sql= "UPDATE $tablename SET $fieldname=? WHERE $idname=? AND $token=?"; 
     $q = $conn->prepare($sql); 
     $q->execute(array($value,$id,$tokenvalue)); 
     $conn = null;} 
} 


//This as the first query works!   
$saveanchor = new BakeIT(); 
$saveanchor->simple_update('navigation','anchor','whoo',5,'idnavigation','hash','3234'); 

//This as the second query not!  
$savetitle = new BakeIT(); 
$savetitle->simple_update('navigation','linkname','kawoom',5,'idnavigation','hash','3234'); 
+0

你不觉得你的SQL语句很危险吗?你使盲目的数据更复杂化,但我认为这是可能的。 Btt字段链接名称是否存在? – rekire 2012-03-05 15:37:26

+0

不工作..你是指一些确切的错误,或者它默默无闻? – rkosegi 2012-03-05 15:38:17

+0

@rekire,rkosegi谢谢你的帮助。链接名称确实存在...如果我用$ savetitle替换$ saveanchor一切都正常......失败意味着它默默无闻...... – Jurudocs 2012-03-05 15:45:28

回答

1

领域linkname没有按不存在。

要我对安全评论:到目前为止,我知道prepred statemend防止攻击者注入任何错误值进入该领域的内容。

function example($value, $primarykey, $condition) { 
    $q = $conn->prepare("UPDATE table SET somefield=? WHERE $primarykey=?"); 
    $q->execute(array($value,$condition)); 
} 

这是不可能操纵参数$value$condition但你可以设置$tableid1=1 --这将覆盖你compleate表。

E.g. example(12, 34, "1=1 --");这将执行此处:

UPDATE table SET somefield=12 WHERE 1=1 --=34 
+0

再次感谢您的帮助... im确保没有probs与表列...请参阅上述编辑有关错误... – Jurudocs 2012-03-05 16:21:54

+0

@Jurudocs我认为数据库连接在第一次更新后关闭。看起来'$ this-> connect_db()'在第二次调用'null'时返回。 – rekire 2012-03-05 16:26:23

+0

谢谢......我只是掏空了......但是到目前为止没有任何变化...... – Jurudocs 2012-03-05 16:31:34

1

好吧,我明白了!这是外部数据库访问数据的require_once。只有在“需要”的data.php(脚本DB访问变量)一切工作正常...

感谢您的帮助,但!