PHP PDO MySQL: оператор вставки выполняется без ошибок, вставка не происходит

Мой код:

<?php

try {
$t = '040485c4-2eba-11e9-8e3c-0231844357e8';

if (array_key_exists('t', $_REQUEST)) {
  $t = $_REQUEST["t"];
}

if (!isset($_COOKIE['writer'])) {
  header("Location: xxx");
  return 0;
}
$writer = $_COOKIE['writer'];

$dbhost = $_SERVER['RDS_HOSTNAME'];
$dbport = $_SERVER['RDS_PORT'];
$dbname = $_SERVER['RDS_DB_NAME'];
$charset = 'utf8' ;
$dsn = "mysql:host = {$dbhost};port = {$dbport};dbname = {$dbname};charset = {$charset}";
$username = $_SERVER['RDS_USERNAME'];
$password = $_SERVER['RDS_PASSWORD'];

$pdo = new PDO($dsn, $username, $password);

$stmt = $pdo->prepare("select writer from mydbtbl where writer=? and t=?");
$stmt->execute(array($writer, $t));
$num = $stmt->fetch(PDO::FETCH_NUM);
if ($num < 1) {
  header("Location: login.php");
  return 0;
}

$dbMsg = "Authorized";

$dbname = 'imgs';
$dsn = "mysql:host = {$dbhost};port = {$dbport};dbname = {$dbname};charset = {$charset}";
$pdo = new PDO($dsn, $username, $password);

if (isset($_FILES['filename'])) {

  $name = $_FILES['filename']['name'];

  // set path of uploaded file
  $path = "./".basename($_FILES['filename']['name']); 

  // move file to current directory
  move_uploaded_file($_FILES['filename']['tmp_name'], $path);

  // get file contents
  $data = file_get_contents($path, NULL, NULL, 0, 60000);    

  $stmt = $pdo->prepare("INSERT INTO file (contents, filename, t) values (?,?,?)");
  $stmt->execute(array
    ($data,
     $name,
     $t)
  );
  $dbMsg = "Added the file to the repository";
 // delete the file
 unlink($path);
}
} catch (Exception $e) {
  $dbMsg = "exception: " . $e->getMessage();
}

В коде вы увидите, что первая часть предназначена для аутентификации. Затем я создаю новый объект PDO в схеме img и после этого выполняю запрос на вставку файла.

Позже, когда я распечатываю $dbMsg, он говорит: «Добавил файл в репозиторий». Но когда я запрашиваю базу данных (MySQL на Amazon AWS с использованием MySQL Workbench), ничего не вставляется.

Я не понимаю, почему, если ничего не вставляется, я не получаю сообщение об ошибке. Если написано "добавлен файл в репозиторий", разве это не означает, что вставка прошла успешно? Единственное, что я могу думать, это то, что использование другой схемы для этого испортит ситуацию. Все мои вставки в ebdb проходят нормально

--- РЕДАКТИРОВАТЬ ---

Этот вопрос был помечен как возможный дубликат моего запроса о том, что я не получил сообщение об ошибке в моем коде вставки/выполнения. Это была полезная ссылка, и я определенно узнаю об этом и проверю в будущем, но в конечном итоге ответ — это тот, который я предоставил в отношении условий обслуживания для моей учетной записи aws.

Я думаю, вы могли бы удалить закомментированные строки кода, чтобы сделать его более читаемым.

Elzo Valugi 03.05.2019 12:46

Тот факт, что у вас есть сообщение "добавлено...", прямо не означает, что вставка прошла успешно. Эта строка кода находится в том же блоке кода, но не связана напрямую. Чтобы быть уверенным, оберните ваш оператор execute в if как здесь stackoverflow.com/questions/9991882/…

Elzo Valugi 03.05.2019 12:48

Возможный дубликат $stmt->execute(): как узнать, была ли вставка БД успешной?

Elzo Valugi 03.05.2019 12:50

Вам не хватает кавычек после login.php в следующей строке: header("Location: login.php); Должно быть: header("Location: login.php"); Возможно, проблема в этом.

K. P. 03.05.2019 12:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ заключается в том, что (бесплатная) политика учетной записи Amazon, с которой я работаю, позволяет мне иметь только 1 базу данных/схему. Когда я переключил таблицу на ebdb, она сразу заработала. Я отвечаю на свой вопрос (а не удаляю), поэтому, надеюсь, другие, использующие AWS / MySQL, смогут извлечь уроки из моего опыта.

Если вы собираетесь оставить вопрос поднятым, вам следует исправить опечатку, указанную в комментариях, а также принять свой собственный ответ.

Nick 05.05.2019 05:41

Другие вопросы по теме