这让我发疯了...我正在尝试使用预处理语句插入并且该事情无声地失败。 这是代码:
$sql = 'INSERT INTO payments (id_fix, name, date, comment, timestamp) VALUES (:id_fix, :name, :date, :comment, :timestamp)';
$q = $this->PDO->prepare($sql);
$a = array(
'id_fix' => $r['id'],
'name' => $r['name'],
'date' => $r['evt_date'],
'comment' => $this->comment,
'timestamp' => $r['timestamp']);
$q->execute($a) or die ('NAPAKA');
$ r来自另一个查询。 我知道我应该做简单的子查询,但我想解决这个问题。
如果我改变
'id_fix' => 0
它有效!如果我回显$ r ['id'],这是一个有效的数字。
'id_fix' => intval($r['id'])
无效。
有什么想法吗? :-S
答案 0 :(得分:1)
$sql = 'INSERT INTO payments (id_fix, name, date, comment, timestamp) VALUES (:id_fix, :name, :date, :comment, :timestamp)';
$q = $this->PDO->prepare($sql);
$q->bindParam(':id_fix',$r['id_fix']);
$q->bindParam(':name',$r['name']);
$q->bindParam(':date',$r['date']);
$q->bindParam(':comment',$r['comment']);
$q->bindParam(':timestamp',$r['timestamp']);
$q->execute() or die ('NAPAKA');
答案 1 :(得分:1)
事情无声地失败 - OP
您需要检查错误,请阅读Errors and error handling
try {
$this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = '
INSERT INTO payments
(id_fix,
NAME,
date,
comment,
timestamp)
VALUES (:id_fix,
:name,
:date,
:comment,
:timestamp)
';
$q = $this->PDO->prepare($sql);
$a = array(
'id_fix' => $r['id'],
'name' => $r['name'],
'date' => $r['evt_date'],
'comment' => $this->comment,
'timestamp' => $r['timestamp']);
$q->execute($a);
} catch (PDOException $e) {
echo 'Query failed: ' . $e->getMessage();
}
答案 2 :(得分:0)
如果我改变
'id_fix' => 0
它有效!如果我回复$ r [' id']这是一个有效的号码。
'id_fix' => intval($r['id'])
没有工作。
解释这些症状的简单解释是:您插入的表格PRIMARY INDEX AUTO_INCREMENT
上有id_fix
。发送0具有使参数归零的效果,这意味着将自动生成新ID。它有效。
您尝试插入的其他ID已经存在,并导致错误。
我不是说 - 我无法保证 - 这是 的解释,但它是 解释,如果没有更详细的错误信息,我担心这是最好的。
您需要激活错误报告,使用PDO exceptions,并使用try / catch包围您的查询。