【问题标题】:SQL UPDATE and SET on phpmyadmin depending on the valuesphpmyadmin 上的 SQL UPDATE 和 SET 取决于值
【发布时间】:2020-01-08 06:45:22
【问题描述】:

想知道我的 SQL 更新案例为何无法正常运行。 我已经有了价值观:

$usrcustomerid = 110;
$search = 'face';

在 SET 中寻找对我的 CASE 的修复,因为此 SQL 触发时没有更新

SQL 更新代码

   public function UpdateUserSearch($db, $usrcustomerid, $search) {
   $stmt = $db->prepare(
     " UPDATE usr_customer
       SET search_counter = (CASE WHEN search_counter = 1 THEN 2
                                  WHEN search_counter = 2 THEN 3
                                  WHEN search_counter = 3 THEN 1 END),

           search1 = (CASE WHEN search_counter = 1 THEN $search END),
           search2 = (CASE WHEN search_counter = 2 THEN $search END),
           search3 = (CASE WHEN search_counter = 3 THEN $search END)
       WHERE usrcustomerid = $usrcustomerid "
   );

   $stmt->bindValue(':usrcustomerid', $usrcustomerid, PDO::PARAM_INT);
   $stmt->bindValue(':search', $search, PDO::PARAM_STR);
   $stmt->execute();
   $rowAffected = $stmt->rowCount();

   return $rowAffected;
 }

表 usr_customer

在下图中,用户的 search_counter 设置为 1,三个搜索列里面没有值,所以代码,根据我在 CASE 中的逻辑,应该在“search1”中插入我的“$search”值并将 search_counter 从 1 更新为 2。

PS 我知道 SQL 注入,请不要用提醒来回答,因为我试图让我的代码首先工作。

【问题讨论】:

    标签: php mysql sql sql-update case


    【解决方案1】:

    这不是 SQL 问题,而是 PHP 问题。您在 SQL 查询中替换的值应以 : 而不是 $ 为前缀。

         " UPDATE usr_customer
           SET search_counter = (CASE WHEN search_counter = 1 THEN 2
                                      WHEN search_counter = 2 THEN 3
                                      WHEN search_counter = 3 THEN 1 END),
    
               search1 = (CASE WHEN search_counter = 1 THEN :search END),
               search2 = (CASE WHEN search_counter = 2 THEN :search END),
               search3 = (CASE WHEN search_counter = 3 THEN :search END)
           WHERE usrcustomerid = :usrcustomerid "
    

    见:PHP Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2018-10-06
      • 2021-12-27
      • 1970-01-01
      • 2022-09-22
      • 2010-10-16
      相关资源
      最近更新 更多