【问题标题】:PHP doesn't enter into databasePHP没有进入数据库
【发布时间】:2017-08-10 03:35:08
【问题描述】:

我正在创建一个购物车数据库,我想将已经“活动”了 48 小时的购物车转移到一个 inactive_carts 表中。

现在我有了这段代码,但问题是,它没有把它放在数据库中,我检查了所有$time 项目都进入了 if 命令

这是我的代码:

foreach ($times as $time) {
    $username = $time['username'];
    $user_id = $time['user_id'];
    $cart_id = $time['cart_id'];
    $cart_value = $time['cart_value'];
    if ($timeAlive >= 12000) {
        try {

            $queryInctive = $con->prepare('
                INSERT INTO inactive_carts(`cart_id` , `username` , `user_id` , `cart_value` , `date`) 
                 VALUES(:cart_id , ":username" , :user_id , ":cart_value" , CURRENT_TIMESTAMP)');
            $queryInctive->bindParam(":cart_id" , $cart_id , PDO::PARAM_INT);
            $queryInctive->bindParam(":username" , $username);
            $queryInctive->bindParam(":user_id" , $user_id , PDO::PARAM_INT);
            $queryInctive->bindParam(":cart_value" ,$cart_value );
            $queryInctive->execute();
        } catch (Exception $e) {
            echo "Error is: " . $e->getMessage();
        }
    }
}

我完全没有错误。好像一切都好

注意: cart_id 是一个 int , username 是一个 string , user_id 是一个 int , cart_value 是一个数组

【问题讨论】:

  • 如何获得$times 变量?你确定你输入了if-block? PDO 是否设置为抛出异常? PHP 原生的错误记录呢? error_reporting(E_ALL); ini_set("display_errors", 1);

标签: php pdo


【解决方案1】:

您可以通过在查询中完成所有操作来简化此操作。执行INSERT..SELECT,然后删除之后的行。这样您就不必先获取值(我不知道您是如何获得 $times 变量开头的)。

$con->beginTransaction();     // Begin transaction
try {
    // Set a MySQL variable with the current time
    $con->query('SET @NOW := (NOW())');

    // Insert from old table into new table
    $con->query('INSERT INTO inactive_carts SELECT * FROM carts WHERE date < DATE_SUB(@NOW, INTERVAL 2 DAY)');

    // Then delete the old values
    $con->query('DELETE FROM carts WHERE date < DATE_SUB(@NOW, INTERVAL 2 DAY)');

    // Commit changes!
    $con->commit();
} catch (PDOException $e) {
    // Something went bad, and transfer wasn't made
}

注意:这里假设 cartsinactive_carts 具有相同的列

另外请注意,您可能没有收到任何错误,因为您可能没有启用 PDO 异常。添加

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

在创建 PDO 对象后将启用它。您还应该通过在文件顶部添加以下内容来启用原生 PHP 错误报告

<?php 
error_reporting(E_ALL);
ini_set("display_errors", 1);

【讨论】:

  • 已修复,问题是我在参数周围加了引号,无论如何,谢谢。
  • 顺便说一句,你知道我可以将数组插入数据库的方法吗?
  • 这是一个更优雅、更动态的解决方案,您不妨采用它;-) 而且您不应该将数组或逗号分隔值插入数据库,而应该对其进行规范化。见stackoverflow.com/questions/246701/…
  • 是的,但未设置列数
  • 好吧,你可以通过SELECT `cart_id`, `username`, `user_id`, `cart_value`而不是SELECT *来移动选定的列,然后将date列为CURRENT_TIMESTAMP默认值。
【解决方案2】:

我的问题是这个问题是数据库中的变量名在我的代码中是大写和小写的。

https://www.w3schools.com/php/php_mysql_intro.asp

我在这里学到了关于 php 和 mysql 的所有知识。是一个众所周知的好例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多