PHP脚本不保存数据到MySQL数据库

bqf10yzr  于 2023-05-05  发布在  PHP
关注(0)|答案(2)|浏览(98)

我有一个PHP脚本,它应该将电影ID保存到名为“seen_movies”的MySQL数据库表中。但是,即使脚本运行时没有错误,数据也不会保存到表中。我已经检查了该表是否具有正确的列和数据类型,还检查了SQL语句是否正确。我不知道还能尝试什么。
以下是我的PHP代码:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Origin: http://localhost:3001');
header('Access-Control-Allow-Origin: http://localhost:3000');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

$servername = "*********";
$username = "******";
$password = "************";
$dbname = "my_movies";

// create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// get selected movie IDs
if (isset($_POST['selectedMovies'])) {
    $selectedMovies = $_POST['selectedMovies'];

    // prepare and bind SQL statement
    $stmt = $conn->prepare("INSERT INTO seen_movies (id) VALUES (?)");
    $stmt->bind_param("i", $movieId);

    // loop through selected movie IDs and execute SQL statement
    foreach ($selectedMovies as $movieId) {
        $stmt->execute();
    }

    // close statement
    $stmt->close();
}

echo json_encode(array('status' => 'success'));

$conn->close();
?>

浏览器控制台响应:

Saving movies: (2) [315162, 700391]     PopularMovies.js:28
API response: {status: 'success'}       PopularMovies.js:40

下面是mysql中的表布局

mysql> DESCRIBE seen_movies
       -> ;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int unsigned | NO   | PRI | NULL    | auto_increment |
| title | varchar(255) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

我已经检查了phpmyadmin和mysql中的表数据,表是空的。
我已经想了好几个小时了,谢谢!
编辑:
我查看了开发人员工具中的网络选项卡,以查看代码是否与API交互,我可以看到它列出,但响应显示“未能加载数据:没有内容可用于预检请求'

mnemlml8

mnemlml81#

title字段is non-null,意味着您不能插入不包含标题的行:

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| title | varchar(255) | NO   |     | NULL    |                |

但是你的SQL正试图做到这一点:

$stmt = $conn->prepare("INSERT INTO seen_movies (id) VALUES (?)");

代码中没有error handling,所以你看不到错误,但语句失败了。

zvms9eto

zvms9eto2#

一个或多或少类似于你的问题的答案被张贴here
但简而言之,绑定只执行一次,当时的值在变量$movieID中。由于变量没有初始化,$stmt变成了一个“insertnothing”查询,这是完全有效的(因此成功),但是没有任何东西插入到数据库中(并且这个查询被执行多次)。
试着用这种方式修改你的代码:

//loop through selected movie IDs and execute SQL statement
    foreach ($selectedMovies as $movieId) {
        $stmt->bind_param("i", $movieId);
        $stmt->execute();
    }

希望这有帮助!

相关问题