我使用此函数向数据库插入用户的错误。我的公共职能是:
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";
为什么这不起作用?
如果我的英语不好,请提前致谢并抱歉!
答案 0 :(得分:-3)
首先,您应该不在方法中连接,也不应在应用程序类中连接。但是你已经在某处创建了$ 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);
}