我使用这个函数将用户的错误插入到数据库中。我的公共函数是这样的。
public function set_error($var) {
$dsn = 'mysql:***;host=***';
$username = '***';
$passd = '***';
try {
$pdo = new PDO($dsn, $username, $passd);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$stmt = $pdo->prepare("INSERT INTO errors (ip, code, browser, referer, script, email, date) VALUES (:ip, :code, :browser, :referer, :script, :email, :date)");
$params = array('ip' => $_SESSION['info_utente']['ip'], 'code' => $var, 'browser' => $_SESSION['info_utente']['browser'], 'referer' => $_SESSION['referer'], 'script' => $_SESSION['info_utente']['script'], 'email' => $_SESSION['sessione_attiva']['email'],'date' => $this->ftime());
$stmt->execute($params);
return TRUE;
} catch (PDOException $e) {
return FALSE;
}
}
我有一个类似的函数(插入到账户),这个函数可以用!
所以我把set_error函数调用到另一个函数中(注册或登录),如果用户有错误,我就调用这个函数:$this->set_error("error_1");但不工作。
我检查了数据库,一切正常。列名也没问题,而且都是VARCHAR(255)。
正是如此。
$this->set_error("error_1");
return "error_1";
为什么不能用?
先谢谢你,如果我的英语不好,对不起
首先,你不应该在方法中连接,也不应该在应用类中连接,而是应该在某个地方创建$pdo对象,然后在构造函数中把它传递给应用类,并分配给一个类变量。其次,你必须配置PDO来实际抛出错误。同时你还必须设置整个PHP的错误报告。第三,你必须摆脱这个 try..catch
直到你知道它是干什么用的。
所以,这个函数应该像
public function set_error($var) {
$sql = "INSERT INTO errors (ip, code, browser, referer, script, email, date)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $this->pdo->prepare($sql);
$params = array($_SESSION['info_utente']['ip'],
$var,
$_SESSION['info_utente']['browser'],
$_SESSION['referer'],
$_SESSION['info_utente']['script'],
$_SESSION['sessione_attiva']['email'],
$this->ftime()
);
$stmt->execute($params);
}