Im пытается повернуть назад на моем Добавить форму отправки видео, чтобы обновить другую таблицу mysql, чтобы отслеживать, что отправитель сообщает, какие видео ссылки. Я пытаюсь вставить идентификатор видео, вставив последнее видеоизображение в таблицу представления с помощью MAX (), и имя пользователя будет просто взято из: submitter, а опубликованныйOn использует now () для получения метки времени. После использования формы отправки данные не вводятся в таблицу adminposts и не получают никаких ошибок. Спасибо за помощь.
<?php require_once '../connection.php'; $sql = "INSERT INTO videoinfo (submitter,videoTitle,channelName,videoLink,videoLength) VALUES(:submitter,:videoTitle,:channelName,:videoLink,:videoLength)"; $stmt = $dataconn -> prepare($sql); $stmt -> execute(array(":submitter"=> $_POST['submitter'], ":videoTitle"=> $_POST['videoTitle'], ":channelName"=> $_POST['channelName'], ":videoLink"=> $_POST['videoLink'], ":videoLength"=> $_POST['videoLength'])); $sql = "SELECT MAX(videoId) FROM videoinfo"; $stmt = $dataconn->prepare($sql); $stmt -> execute(array()); $record = $stmt->fetch(); $videoID = $record['videoId']; $username = $_POST['submitter']; $postedOn = now(); $sql = "INSERT INTO adminposts (videoId,username,postedOn) VALUES(:videoId,:username,postedOn = now())"; $stmt = $dataconn -> prepare($sql); $stmt -> execute(array(":videoId"=> $videoID, ":username"=> $username)); echo "<h3>Video has been successfully added!"; include 'adminmain.php' ?>
обновленный код
$sql = "SELECT MAX(videoId) AS videoId FROM videoinfo"; $stmt = $dataconn->prepare($sql); $stmt -> execute(array()); $record = $stmt->fetch(); $videoID = $record['videoId']; var_dump($videoID); $username = $_POST['submitter']; $postedOn = now(); $sql = "INSERT INTO adminposts (videoId,username,postedOn) VALUES(:videoId,:username,$postedOn)"; $stmt = $dataconn -> prepare($sql); $stmt -> execute(array(":videoId"=> $videoID, ":username"=> $username)); $stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Следующие работали для меня:
Я должен указать, что вы не можете использовать $postedOn = now();
как переменную для публикации текущего времени / даты. Он должен быть введен как часть VALUES
Т.е.: VALUES(:videoId,:username,NOW())";
Обратите внимание, что я использовал $pdo
в качестве переменной соединения.
<?php $mysql_hostname = 'xxx'; $mysql_username = 'xxx'; $mysql_password = 'xxx'; $mysql_dbname = 'xxx'; try { $pdo= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { exit( $e->getMessage() ); } $sql = "SELECT MAX(videoId) AS videoId FROM videoinfo"; $stmt = $pdo->prepare($sql); $stmt -> execute(array()); $record = $stmt->fetch(); $videoID = $record['videoId']; // var_dump($videoID); $username = $_POST['submitter']; try { $sql = "INSERT INTO adminposts (videoId,username,postedOn) VALUES(:videoId,:username,NOW())"; $stmt = $pdo -> prepare($sql); $stmt -> execute(array(":videoId"=> $videoID,":username"=> $username)); } catch(PDOException $e){ // $result = "Sorry, an error occurred while editing the database."; // will print a message of the actual error should there be one print $e->getMessage(); }
Поскольку комментарии к вашему вопросу выделены, вы не выполняете проверку ошибок, и вам нужно будет создать псевдоним для MAX (videoId), если вы хотите пройти этот маршрут.
Однако, для вашего конкретного случая использования, я бы предложил посмотреть PDO :: lastInsertId (), чтобы получить видео, которое вы только что вставили. http://www.php.net/manual/en/pdo.lastinsertid.php
Это устранит необходимость явного вывода второго запроса и псевдоним столбца MAX ().