【问题标题】:SQL database not updating data in PHP [duplicate]SQL数据库未更新PHP中的数据[重复]
【发布时间】:2020-12-06 08:45:48
【问题描述】:

我正在尝试从我的数据库中更新一些数据,但我尝试/发现的所有数据都没有成功。没有错误或任何东西,实际上什么都没有发生。页面重新加载,但它没有将任何内容存储到数据库中。我该如何解决这个问题?

代码:

function AddToBook() {
          $get_post_id = filter_var(htmlentities($_GET['pid']), FILTER_SANITIZE_NUMBER_INT);
          $book_id = filter_var(htmlentities($_GET['bid']), FILTER_SANITIZE_NUMBER_INT);
          $get_episodes = filter_var(htmlentities($_GET['ep']), FILTER_SANITIZE_NUMBER_INT);
          $episode = $get_episodes + 1;

          // Insert book data into wpost

          $odb = new PDO("mysql:host=localhost;dbname=test", 'root', '');

          $updatePostRecord = "UPDATE wpost SET book_id=:book_id, episode_number=:episode WHERE id=:get_post_id";
          $UpdatePost = $odb->prepare($updatePostRecord);
          $UpdatePost->bindParam(':book_id',$book_id,PDO::PARAM_INT);
          $UpdatePost->bindParam(':episode',$episode,PDO::PARAM_INT);
          $UpdatePost->bindParam(':get_post_id',$get_post_id,PDO::PARAM_INT);
          $UpdatePost->execute();

          // Insert post data into books
          $updateBookRecord = "UPDATE books SET episodes='$episode' WHERE id='$book_id'";
          $UpdateBook = $conn->prepare($updateBookRecord);
          $UpdateBook->execute();
        }

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    如果您使用字符串文字,您想使用在那里定义的 PDO 类而不是 $conn(未定义),不妨将变量放在括号中,以确保它们被正确解释。

    $updateBookRecord = "UPDATE books SET episodes='{$episode}' WHERE id='{$book_id}'";
    $UpdateBook = $obd->prepare($updateBookRecord);
    $UpdateBook->execute();
    

    此外,就目前而言,这不是一个适当的准备好的陈述。您应该像在初始 UpdatePost 上一样使用 bindParam 函数。

    这是一个适当的准备好的语句。

    $updateBookRecord = "UPDATE books SET episodes=:episode WHERE id=:book_id";
    $UpdateBook = $obd->prepare($updateBookRecord);
    $UpdateBook->bindParam(':episode',$episode,PDO::PARAM_INT);
    $UpdateBook->bindParam(':book_id',$book_id,PDO::PARAM_INT);
    $UpdateBook->execute();
    

    【讨论】:

      【解决方案2】:

      一次更新可以成功更新 0 行。我会三次检查你的 WHERE 子句,看看它是否真的试图匹配现有的行。

      【讨论】:

        【解决方案3】:

        当你在变量中使用单引号 '' 时,php 将其理解为字符串而不是变量。所以您可能希望将更新语句更改为

         $updateBookRecord = "UPDATE books SET episodes = $episode WHERE id= $book_id ";
        

        或者

        $updateBookRecord = "UPDATE books SET episodes = ". $episode . " WHERE id= ".$book_id;
        

        然而这不是标准的做事方式,并且会邀请sql注入,你最好使用PDO或其他机制来使其更安全。 https://www.w3schools.com/sql/sql_injection.asp

        【讨论】:

        • 这个答案促进了通过字符串连接创建sql语句,这容易出错并启用sql注入类型攻击。如果您不介意您的网站被黑客入侵,请仅遵循此建议!
        • @Shadow 答案已编辑。
        • 不会让它变得更好。
        猜你喜欢
        • 2017-08-25
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        相关资源
        最近更新 更多