Php PDO插入到';行不通
我使用此函数将用户的错误插入数据库。我的公共职能是:Php PDO插入到';行不通,php,pdo,Php,Pdo,我使用此函数将用户的错误插入数据库。我的公共职能是: public function set_error($var) { $dsn = 'mysql:***;host=***'; $username = '***'; $passd = '***'; try { $pdo = new PDO($dsn, $username, $passd); $pdo->setAttribute
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调用到另一个函数(注册或登录)中,如果用户有错误,我将函数So:$this->set_error(“error_1”);但是不起作用
我检查了数据库,一切正常!列的名称是ok,所有列都是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);
}
异常$e中的错误消息是什么?这应该会让你知道它失败的原因。但是您忽略了它。注意:在请求有关错误原因的帮助之前,请删除
catch$e-Ignore
-1 forreturn FALSE
,但代码中还有十几个其他错误。日期不是保留字。@Mihai,参数名称与保留字无关。由于MySQL不支持命名参数,PDO必须在MySQL看到查询之前重写查询以使用位置参数(?
)。但是MichaelBerkowski的评论是,在当前版本的PHP中,发送到execute()的参数数组不需要在前面加冒号。(旧的PHP确实需要它。)我发现了问题。所有参数(电子邮件等)都为空,但在DB中不能为空。不过,感谢您的支持和所有建议。