搜索的单词未在我的数据库中正确注册

时间:2019-02-01 01:17:56

标签: php mysql database

我正在尝试在数据库中注册用户在我的网站上搜索的单词。

想法如下:如果搜索到的单词与数据库中已经注册的单词匹配,我只需在搜索单词的次数上加1。 如果在我的搜索表中找不到该词,则将一个新词添加到表中。

问题是我要查找的单词是什么,如果该单词已在我的表中注册,请用要查找的单词的名称修改所有记录,并将数量增加一。例如:我有两个寄存器,单词1和单词2,如果我搜索单词1,它返回,它将用单词1的名称更新两个单词,并用单词1的数量更新

我表中的字段是id,单词和金额

我的代码中的问题出在哪里?

我共享仅对控制器进行呼叫的部门,然后共享有关控制器和模型的所有信息

search.php

$response= SearchController::ctrNewSearch($word);

search.controller.php

<?php

class SearchController{

    public function ctrNewSearch($word){

        $table = "searchs";

        $response = SearchModel::mdlShowSearchs($table);

        $foundWord = 0;
        $amount= "1";

        foreach ($response as $key => $value) {

            if ($value["word"] == $word) {

                $foundSearch= 1;
                $id = $value["id"];
                $updatedAmount= $value["amount"] + 1;

            } 

        }

        if ($foundWord == 1){

            $response1= SearchModel::mdlUpdateSearch($table, $word, $id, $updatedAmount);
            return $response1;

        } else {

            $response0 = SearchModel::mdlAddSearch($table, $word, $amount);
            return $response0;

        }

    }

}

search.model.php

<?php

require_once "conection.php";

class SearchModel{

    static public function mdlShowSearchs($table){

        $stmt = Conexion::conectar()->prepare("SELECT * FROM $table");

        $stmt -> execute();

        return $stmt -> fetchAll();

        $stmt -> close();

        $tmt =null;

    }

    static public function mdlAddSearch($table, $word, $amount){

        $stmt = Conexion::conectar()->prepare("INSERT INTO $table (word, amount) VALUES (:word, :amount)");

        $stmt->bindParam(":word", $word, PDO::PARAM_STR);
        $stmt->bindParam(":amount", $amount, PDO::PARAM_INT);

        if($stmt->execute()){ 

            return "ok"; 

        }else{ 

            return "error"; 

        }

        $stmt->close();

        $tmt =null;
    }

    static public function mdlUpdateSearch($table, $word, $id, $updatedAmount){

        $stmt = Conexion::conectar()->prepare("UPDATE $table SET word = :word, amount = :amount WHERE $id = :id");

        $stmt->bindParam(":word", $word, PDO::PARAM_STR);
        $stmt->bindParam(":amount", $updatedAmount, PDO::PARAM_INT);
        $stmt->bindParam(":id", $id, PDO::PARAM_INT);

        if($stmt -> execute()){

            return "ok";

        }else{

            return "error"; 

        }

        $stmt -> close();

        $stmt = null;

    }

}

1 个答案:

答案 0 :(得分:1)

对于每个循环,如果条件不是检查而是分配始终为真,则存在问题。更新查询应该在for循环中,并且如果发现单词,则$ foundword变量每次将其分配为0。我进行了一些更改,请尝试一下,然后尝试解决是否存在语法问题。

docker-compose up