为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕姐8265434 2022-01-24 09:58:25
我已经建立了一个充满电影的数据库,该数据库连接到一个 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)。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

您的查询应该使用WHERE id = :id(单个电影项目)或WHERE id IN (SELECT id FROM movies WHERE title LIKE '%$title%')(多个电影项目),不能同时使用,也不能用;.


我假设你想使用后者(更新多个电影项目),改变


$stmt = $conn->prepare(

                    "UPDATE movies SET 

                times_searched = times_searched + 1 WHERE id = :id; 

                IN (SELECT * FROM movies WHERE title LIKE '%$title%'"

                ); 

                $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

                $stmt->bindValue(':id', $result['id']);

                $stmt->execute();


$stmt = $conn->prepare("UPDATE movies SET times_searched = times_searched + 1 WHERE id IN (SELECT id FROM movies WHERE title LIKE :title)"); 

$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}%");


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号