将正确的值插入数据库表而不是0

时间:2017-01-06 10:30:21

标签: php mysql database

我正在为我的大学项目创建一个简单的网上商店,它使用数据库中的两个表(用户和项目)。 我尝试在数据库中插入一些有关特定项目的信息。最后一列是已记录用户的ID。我查询从'users'表接收实际登录用户的id。 当我使用这个变量($ lastlogin)通过echo打印它显示一个正确的值。 不幸的是,当我尝试使用insert查询将id插入表'items'时,会出现0而不是正确的值(例如5)。 有谁知道如何解决我的问题?我将不胜感激。

$idlogin = "SELECT id FROM users WHERE login=:login";
$query = $db->prepare($idlogin);

$query->bindParam(":login", $_SESSION['login']);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
$lastlogin = $row["id"];

$sql = "INSERT INTO `items` VALUES (NULL, :name, :description, :cust_id)";
$params = [ ":name" => trim($_POST["name"]),
            ":description" => trim($_POST["description"]),
            ":cust_id" => '$lastlogin'];
$query = $db->prepare($sql);
$query->execute($params);

2 个答案:

答案 0 :(得分:2)

您不必将$lastlogin放在params中的引号之间。如果这样做,mysql会将其视为值为"$lastlogin"的字符串。 Mysql将无法将其解析为整数,而是添加值0

$params = [ 
    ":name" => trim($_POST["name"]),
    ":description" => trim($_POST["description"]),
    ":cust_id" => $lastlogin
];

答案 1 :(得分:0)

好的,谢谢所有试图帮助我的人

我在this thread的Michael Berkowski回复中找到了线索 $ lastlogin只是第一次初始化,所以我将它放入$ _SESSION ['lastlogin']并在sql查询中调用它。

$idlogin = "SELECT id FROM users WHERE login=:login";
$query = $db->prepare($idlogin);
$query->bindParam(":login", $_SESSION['login']);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
$lastlogin = (int)$row["id"];
$_SESSION['lastlogin'] = $lastlogin;

$sql = "INSERT INTO items VALUES (NULL, :name, :description, :cust_id)";

$params = [ 
    ":name" => trim($_POST["name"]),
    ":description" => trim($_POST["description"]),
    ":cust_id" => $_SESSION['lastlogin']
];
$query = $db->prepare($sql);
$query->execute($params);

现在一切都很好。再次感谢您的时间。