【问题标题】:PHP PDO silently not insertingPHP PDO静默不插入
【发布时间】:2015-02-24 11:10:01
【问题描述】:

这让我发疯......我正在尝试使用准备好的语句插入,但事情却默默地失败了。 代码如下:

$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

【问题讨论】:

  • 你能不能把die ('NAPAKA')换成die ($q->errorInfo())然后在这里报错?
  • From [php.net/manual/en/function.intval.php] - The integer value of var on success, or 0 on failure. Empty arrays return 0, non-empty arrays return 1. 如果打印转换的输出会返回什么?
  • 尝试开启错误,你会得到什么?

标签: php mysql pdo insert


【解决方案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');

【讨论】:

  • 不解释,你改了什么?我希望它不仅仅是半结肠因为不会有帮助
  • 它不能是 db 表中的 id_fix 并且你得到 $r['id'],这就是我认为它失败的原因。我还没有看到关于 $r 的所有脚本
  • 你能不能再试试上面的代码。这是正确的,我认为它失败了,因为你使用 $r['id'] 而不是 $r['id_fix']
【解决方案2】:

如果我改变了

 'id_fix' => 0

有效!如果我回显 $r['id'] 这是一个有效数字。

 'id_fix' => intval($r['id'])

不会工作。

解释这些症状的一个简单解释是:您要插入的表在id_fix 上有一个PRIMARY INDEX AUTO_INCREMENT。发送 0 具有将参数清空的效果,即自动生成新的 ID。它有效。

您尝试插入的其他 id 已存在,并导致错误。

我不是说 - 我不能保证 - 这是的解释,但它是一个的解释,并且没有一个更详细的错误信息,恐怕这是可以做到的最好的了。

您需要激活错误报告,使用PDO exceptions,并用try/catch 包围您的查询。

【讨论】:

    【解决方案3】:

    事情默默地失败了 - 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 2012-07-02
      • 1970-01-01
      • 2014-01-25
      • 2018-02-18
      • 2013-08-06
      • 2014-10-15
      • 2012-08-30
      相关资源
      最近更新 更多