您好我使用PDO
来更新MySQL数据库的某些字段。我编写了一个名为“bakeIT”的类,它连接到数据库并根据方法simple_update()
的参数更新一些字段。
不知何故,对BakeIT()->simple_update()
的第一次实例化调用正在运行但不是第二次?这是为什么?我真的很生气......
编辑: 我发现了一些错误:
string(85)“SQLSTATE [28000] [1045]拒绝用户访问 'ODBC'@'localhost'(使用密码:NO)“致命错误:致电会员 函数prepare()在非对象中 BakeIT.php
该表如下所示:
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 :(得分: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变量的脚本)一切正常......
感谢您的帮助!