PHP PDO MySQL: 插入语句运行没有错误,没有发生插入
PHP PDO MySQL: Insert statement runs without error, no insert occurs
我的代码:
<?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();
}
在代码中,您会看到第一部分用于进行身份验证。然后我在 img 模式上创建一个新的 PDO 对象,然后执行我的文件插入查询。
稍后,我打印 $dbMsg 的地方显示 "added file to the repository"。但是当我查询数据库时(MySQL 在 Amazon AWS 上使用 MySQL Workbench)没有插入任何内容。
我不明白为什么在没有插入任何内容的情况下我没有收到错误消息。如果是"added file to the respository",那不就说明插入成功了吗?我唯一能想到的是,为此使用不同的模式会把事情搞砸。我对 ebdb 的所有插入都很好
--- 编辑 ---
这个问题在我关于在我的插入/执行代码中没有收到错误消息的查询中被标记为可能重复。这是一个有用的 link 并且绝对是我将来会知道和检查的东西,但最终答案是我提供的关于我的 aws 帐户服务条款的答案
答案是我正在使用的(免费)亚马逊账户政策只允许我拥有 1 个数据库/模式。当我将 table 切换到 ebdb 时,它立即工作。我正在回答我自己的问题(而不是删除)所以希望其他使用 AWS / 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();
}
在代码中,您会看到第一部分用于进行身份验证。然后我在 img 模式上创建一个新的 PDO 对象,然后执行我的文件插入查询。
稍后,我打印 $dbMsg 的地方显示 "added file to the repository"。但是当我查询数据库时(MySQL 在 Amazon AWS 上使用 MySQL Workbench)没有插入任何内容。
我不明白为什么在没有插入任何内容的情况下我没有收到错误消息。如果是"added file to the respository",那不就说明插入成功了吗?我唯一能想到的是,为此使用不同的模式会把事情搞砸。我对 ebdb 的所有插入都很好
--- 编辑 ---
这个问题在我关于在我的插入/执行代码中没有收到错误消息的查询中被标记为可能重复。这是一个有用的 link 并且绝对是我将来会知道和检查的东西,但最终答案是我提供的关于我的 aws 帐户服务条款的答案
答案是我正在使用的(免费)亚马逊账户政策只允许我拥有 1 个数据库/模式。当我将 table 切换到 ebdb 时,它立即工作。我正在回答我自己的问题(而不是删除)所以希望其他使用 AWS / MySQL 的人可以从我的经验中学习。