当用作方法时,php查询执行错误

当用作方法时,php查询执行错误,php,Php,在我看来,我有一个奇怪的问题。下面的部分很好用 $sql = " UPDATE ".$table[0]." SET p_title = '".$_POST['p_title']."', p_date = '".$_POST['p_date']."' WHERE p_id = '".$_POST['p_id']."' "; if(!$db->exec($sql)){ echo($defaul

在我看来,我有一个奇怪的问题。下面的部分很好用


$sql = "
    UPDATE 
        ".$table[0]."
    SET 
        p_title = '".$_POST['p_title']."', 
        p_date = '".$_POST['p_date']."' 
    WHERE 
        p_id = '".$_POST['p_id']."'
";
if(!$db->exec($sql)){
    echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
}else{
    $defaults->writeLog($table,$db->lastInsertId(),'update');
}
但是当我尝试下面的代码时,我得到了一个“致命错误:对中的非对象调用成员函数exec()”


class Defaults{
    [..]
    public function query($sql){
        if(!$db->exec($sql)){
            echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
        }else{
            $defaults->writeLog($table,$db->lastInsertId(),'update');
        }
    }
    [..]
}
然后在我的页面上


$defaults = new Defaults();
$defaults->query("
    UPDATE 
        ".$table[0]."
    SET 
        p_title = '".$_POST['p_title']."', 
        p_date = '".$_POST['p_date']."' 
    WHERE 
        p_id = '".$_POST['p_id']."'
");
为什么

啊,是关于课上的
$db
。然而,当我做一些像


public function query($sql){
    $db = new PDO($dbdata->hostname,$dbdata->username,$dbdata->password);
    if(!$db->exec($sql)){
        echo($defaults->throwError('MySql error',$sql,implode(":",$db->errorInfo())));
    }else{
        $defaults->writeLog($table,$db->lastInsertId(),'update');
    }
}
我得了严重的感冒

Fatal error: Uncaught exception 'PDOException' with message 'invalid data source name' in /class.defaults.php:8 Stack trace: #0 /class.defaults.php(8): PDO->__construct('', NULL, NULL) #1 /class.form.php(269): Defaults->query('?????????UPDATE...') #2 /module.projectbeheer.edit.php(25): Form->proceed('update', 'p_id', 'rows', Array, Array, '') #3 /class.content.php(16): include_once('/path/') #4 /administratie.php(72): Content->write('/BraamsArchief/...') #5 {main} thrown in /class.defaults.php on line 8 致命错误:未捕获异常“PDOException” 带有消息“无效数据源名称” 在/class.defaults.php中:8 堆栈跟踪: #0/class.defaults.php(8):PDO->_构造(“”,NULL,NULL) #1/class.form.php(269):默认值->查询('???更新…) #2/module.projectbeheer.edit.php(25):表单->继续('update','p\u id','rows',Array,Array')) #3/class.content.php(16):包含一次('/path/')) #4/Administrie.php(72):内容->写入('/BraamsArchief/…) #第8行的/class.defaults.php中抛出了5{main}
$db是否可以从默认值中访问


尝试添加一个
global$db
在函数查询中

必须提供$db作为全局属性或类属性。否则,您无法在方法范围内访问它

因此,要么:

public function query($sql) {
    global $db;
    // now you can use $db as you would in global scope
}
或者,您必须使用数据库连接对象设置一个类属性(例如$this->db),并在方法中使用$this->db访问它


请注意,如果使用
global
解决方案,则需要确保在最初定义变量时始终将其称为$db。否则,您的方法可能无法找到它,您将得到相同的错误。

坏人将杀死您的数据库……您的代码是易受攻击的。第一个代码段的作用域中有
$db
变量;第二种情况并非如此。您没有显示它的初始化位置,但它实际上是这里的键。它仅用于后端,我想可能是两个用户,他们对销毁自己的数据库不感兴趣。但它应该是安全的,我做错了什么?第二个代码段中的$db发生了什么?第二个代码段中的$db发生了什么?