PHP PDO默默无法插入

时间:2014-12-27 16:05:49

标签: php mysql pdo insert

这让我发疯了...我正在尝试使用预处理语句插入并且该事情无声地失败。 这是代码:

$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

3 个答案:

答案 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包围您的查询。