猿问

在数据库中增加字段时遇到问题

我已经建立了一个充满电影的数据库,该数据库连接到一个 HTML 表单,其中的信息通过 PHP POST 移植(充当电影数据库)。


当用户输入搜索词(标题、流派、年份或分类)时,PHP 脚本 search.php 会收到信息。


这很好,但是,我的数据库中还有一个名为 times_searched 的列,其默认值为零。


我觉得最大的问题之一是我盯着这个文件太久了,现在对我来说一些简单的东西并不明显。


一般来说,我对 PHP 和 WebDev 很陌生。我尝试发出第二条语句以在 TableRow 类的 foreach 循环内执行,并尝试了不同的语法并尝试将以前的语句绑定到新语句。


class TableRows extends RecursiveIteratorIterator

{

    function __construct($it) 

    {

        parent::__construct($it, self::LEAVES_ONLY);

    }


    function current() 

    {

        return "<td style='width:150px;border:1px solid black;'>" . 

        parent::current()."</td>";

    }


    function beginChildren() 

    {

        echo "<tr>";

    }


    function endChildren() 

    {

        echo "</tr>" . "\n";

    }

}


function printAssocArray($stmt)

{

    foreach (new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) 

            as $k=>$v) {

                    echo $v;

    }

}




require 'Templates/header.php';

//DB variables

$serverName = "localhost";

$userName = "root";

$password = "";


//Post variables

$title = ($_POST['title']);

$year = ($_POST['year']);

$genre = ($_POST['genre']);

$rating = ($_POST['rating']);


if (isset($_POST['submit'])) {

    try {

            //Create PDO object using DB variables

            $conn = new PDO(

                "mysql:host=$serverName;dbname=project_db", $userName, $password

            );

            //Set PDO error mode to exception

            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            echo "<h3 class='center'>Connection Successful!</h3>";


        }

目的是尝试从数据库返回请求的查询,然后在使用 TableRow 类打印之前增加 times_searched 列,这应该在每次运行查询时发生(如果刷新页面,则 times_searched 列应该增加)


这被用于完成家庭作业项目,安全性不是一个必要的因素(尽管要求使用 PDO)。


慕姐8265434
浏览 213回答 1
1回答

慕后森

您的查询应该使用WHERE id = :id(单个电影项目)或WHERE id IN (SELECT id FROM movies WHERE title LIKE '%$title%')(多个电影项目),不能同时使用,也不能用;.我假设你想使用后者(更新多个电影项目),改变$stmt = $conn->prepare(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "UPDATE movies SET&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; times_searched = times_searched + 1 WHERE id = :id;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IN (SELECT * FROM movies WHERE title LIKE '%$title%'"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $stmt->bindValue(':id', $result['id']);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $stmt->execute();到$stmt = $conn->prepare("UPDATE movies SET times_searched = times_searched + 1 WHERE id IN (SELECT id FROM movies WHERE title LIKE :title)");&nbsp;$stmt->bindValue(':title',"%{$title}%");$stmt->execute();对于// New Block部分:代替$outputQuery = "SELECT * FROM movies WHERE title LIKE '%title%'";$stmt2 = $conn->prepare($outputQuery);$stmt2->bindValue('title', $title);和$outputQuery = "SELECT * FROM movies WHERE title LIKE :title";$stmt2 = $conn->prepare($outputQuery);$stmt2->bindValue(':title', "%{$title}%");
随时随地看视频慕课网APP
我要回答