我正在尝试在数据库中注册用户在我的网站上搜索的单词。
想法如下:如果搜索到的单词与数据库中已经注册的单词匹配,我只需在搜索单词的次数上加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;
}
}
答案 0 :(得分:1)
对于每个循环,如果条件不是检查而是分配始终为真,则存在问题。更新查询应该在for循环中,并且如果发现单词,则$ foundword变量每次将其分配为0。我进行了一些更改,请尝试一下,然后尝试解决是否存在语法问题。
docker-compose up