数据库更新不起作用

时间:2012-03-05 15:29:59

标签: php pdo

您好我使用PDO来更新MySQL数据库的某些字段。我编写了一个名为“bakeIT”的类,它连接到数据库并根据方法simple_update()的参数更新一些字段。

不知何故,对BakeIT()->simple_update()的第一次实例化调用正在运行但不是第二次?这是为什么?我真的很生气......

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

  

string(85)“SQLSTATE [28000] [1045]拒绝用户访问   'ODBC'@'localhost'(使用密码:NO)“致命错误:致电会员   函数prepare()在非对象中   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');

2 个答案:

答案 0 :(得分:1)

字段linkname不存在。

我对安全性的评论:到目前为止,我知道准备状态可防止攻击者将任何错误值注入字段内容。

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

无法操纵参数$value$condition,但您可以将$tableid设置为1=1 --,这将覆盖您的补充表。

E.g。 example(12, 34, "1=1 --");会在此处执行此操作:

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

答案 1 :(得分:1)

好吧,我明白了!它是外部数据库访问数据的require_once。只有“require”data.php(带有db-access变量的脚本)一切正常......

感谢您的帮助!