php - 如果语句条件未运行

标签 php mysql if-statement

<分区>

我正在检查 user_id(它在一个 session 中保存)- 这有效。然后,我为数据库表 click_count 为该用户运行 SELECT 查询。我正在检查该用户是否有任何记录,即:$page_count。如果没有,我希望我的 INSERT 语句运行以将该用户与其他数据一起添加到数据库表中。

我不明白的部分是我的 UPDATE 查询似乎一直在运行。例如,无论我使用查询登录哪个用户,都只会更新数据库表中的唯一用户。 IE:Bob 是 click_count 表中的唯一用户,如果我用 Pete 登录,Bob 的记录正在更新。

我已经测试了 $page_count 的值,它等于 0,所以我的 INSERT 应该正在运行。我也尝试过 if ($page_count === 0) {

有人看到我遗漏了什么吗?

$curPage = $_SERVER['PHP_SELF'];
$clicks = 0;
$setup = 0;
$page_total_count = 0;
var_dump($user_id);
    $click_sql = "
    SELECT *
    FROM click_count
    WHERE user_id = ?
    AND page_url = ?
    ";
    $click_stmt = $con->prepare($click_sql);
    $click_stmt->execute(array($user_id, $curPage));
    $click_stmt_rows = $click_stmt->fetchAll(PDO::FETCH_ASSOC);
    $page_count = $click_stmt->rowCount();
    foreach ($click_stmt_rows as $click_stmt_row) {
        $setup_status = $click_stmt_row['setup'];
        $page_total_count = $click_stmt_row['page_count'];
    }
    if ($page_count == 0) {
        $click_insert_sql = "
            INSERT INTO click_count
            (user_id, page_url, page_count, setup)
            VALUES(?, ?, ?, ?)
            ON DUPLICATE KEY UPDATE page_count=page_count+1;
        ";
        $click_insert_stmt = $con->prepare($click_insert_sql);
        $click_insert_stmt->execute(array($user_id, $curPage, 1, $setup));
    }
    else {      
        $click_update_sql = "
            UPDATE click_count
            SET page_count=page_count+1
            WHERE user_id = ?
            AND page_url = ?
        ";
        $click_update_stmt = $con->prepare($click_update_sql);
        $click_update_stmt->execute(array($user_id, $curPage));
    }

表格

click_count
CREATE TABLE `click_count` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL,
 `page_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `page_count` int(11) NOT NULL,
 `setup` int(5) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `user_id` (`user_id`),
 UNIQUE KEY `page_url` (`page_url`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

最佳答案

由于表中只有一个用户,没有“插入/更新”的记录,因此
ON DUPLICATE KEY UPDATE 默默地让你失望了。

常规UPDATE就足够了:

即举个例子:

UPDATE table SET col_x = 0|1 WHERE col_y = ? // (boolean 0-1)

注意:

如果您以后希望通过计数来增加一列,则语法为:

UPDATE table SET col_x = col_x + 1 WHERE col_y = ?

关于您询问如何改进您的代码:

@Fred-ii- Thanks. Yes, it is working now how I want, but if there are ways to improve the code I am always willing to try to learn it. I just remembered people in the past saying that I didn't need the update query at all with the duplicate key update. – Paul

您可以使用命名占位符 :name 而不是 ? 因为它们更容易跟踪,但这当然是我认为也是的意见问题许多人分享,而不仅仅是我自己。


脚注/学分:

我还要感谢以下评论:

"If you always fall into update indicates that $page_count is not zero.. Try to echo() it to see maybe.. I would probably first try to add another user into click_count table and then it may become easier to see where it goes wrong.. – johnyTee"

OP 回应的地方:

"@Fred-ii- I figured it out. I used johnyTee's advise and tried adding another user to the database manually and it wouldn't let me because of the unique index for the page_url column. I then removed the unique index from it and now it works perfectly. Thanks for the help! – Paul"

关于php - 如果语句条件未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384430/

相关文章:

mysql - 谷歌云 sql 从第一代迁移到第二代,停机时间最少甚至没有

perl - 这个 Perl 表达式有什么问题?

php - yii2 下拉列表 onchange

javascript - 检测 AJAX 请求调用的 Iframe 滚动事件

c# - 从数据库中删除记录

javascript - 单击同级时从导航中删除类

date - 批处理文件从今天开始查找文件并运行另一个 .bat,否则运行 vbs 并退出

php - Laravel 使用查询字符串构建外部 URL 的最佳方法是什么?

php - 第一次 ajax 调用不起作用

php - 基于 php-mysql 的网站的管理和安全