PDO语句未提交到数据库


PDO Statements aren't being submitted to database

我对使用PDO相当陌生,我正在尝试将我的一些网站从mysql_*迁移到它。

我形成了以下内容:

if ($userData) {
    $query = "SELECT * FROM table WHERE user_id = " . $db->quote($userData['id']);
    $result = $db->query($query);

    if ($result) {
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            if ($result->rowCount > 1) {
                $sql = "DELETE FROM tokens WHERE `user_id` = " . $db->quote($userData['id']) . "' AND `id` != '" . $row['id'];
                $stmt = $db->prepare($sql);
                $stmt->execute();
            }
        }
        if (!$row) {
            $sql = "INSERT INTO  tokens SET `user_id` = " . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'";
            $stmt = $db->prepare($sql);
            $stmt->execute();
        } else {
            $sql = "UPDATE tokens SET `access_token` = " . $db->quote($token) . "' WHERE `id` = " . $row['id'] . "";
            $stmt = $db->prepare($sql);
            $stmt->execute();
        }
    }
}

$userData是一个Facebook API变量。

上面的代码片段对我来说看起来不错,但是当我在实时网站上运行它时,信息不会添加到数据库中。

我将如何解决这个问题?任何协助将不胜感激。

您缺少一个引号

$sql = "INSERT INTO  tokens SET `user_id` = <<HERE>>" . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'";

应该是:

$sql = "INSERT INTO  tokens SET `user_id` = '" . $db->quote($userData['id']) . "', `name` = '" . $db->quote($userData['name']) . "',`access_token` = '" . $db->quote($token) . "',`alive` ='Y'";

并在同一个地方的更新语句上。

好的,我要告诉你一件事,请使用占位符。我也遇到了你现在遇到的同样的问题。mysql_函数已弃用,因此开发人员必须使用 PDO 或mysqli_函数。

请检查代码,看看它是否有效

<?php
    if($userData) {
        $query = "SELECT * FROM table WHERE user_id = :user_id";
        $result = $db->prepare($query);
        $result->execute(array(':user_id' => $userData['id']));
        if ($result) {
            while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
                if ($result->rowCount > 1) {
                $sql = "DELETE FROM tokens WHERE `user_id` = :user_id AND `id` != :id";
                $stmt = $db->prepare($sql);
                $stmt->execute(array(':user_id' => $userData['id'], ':id' => $row['id']));
            }
        }
        if(!$row) {
            $sql = "INSERT INTO  tokens SET `user_id` = :user_id, `name` = :name,`access_token` = :access_token ,`alive` ='Y'";
            $stmt = $db->prepare($sql);
            $stmt->execute(array(':user_id' => $userData['id'], ':name' => $userData['name'], ':access_token' => $token));
        } else {
            $sql = "UPDATE tokens SET `access_token` = :access_token WHERE `id` = :id";
            $stmt = $db->prepare($sql);
            $stmt->execute(array(':access_token' => $token, ':id' => $row['id']));
        }
    }
}
?>