PHP — Возможно ли вставить в базу данных название сеанса?

#php #mysql #sql #session #session-variables

#php #mysql #sql #сеанс #сессия-переменные

Вопрос:

Итак, я создаю систему публикации на PHP. Когда пользователь хочет создать сообщение, все поля должны быть полными, и то, что я пытаюсь сделать, это вставить в базу данных название сеанса, например, вставить в базу данных ‘Edward’, потому что это было бы название сеанса. Вот что я пытаюсь сделать:

 <?php

session_set_cookie_params(86400*30, "/");
session_start();

require 'admin/config.php';
require 'functions.php';

if (isset($_SESSION['user'])) {
    require 'view/new.view.php';
} else {
    header('Location: index.php');
}

$connection = connect($bd_config);
if (!$connection) {
    header('Location: error.php');
}

$errors = '';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $title = cleanData($_POST['title']);
    $demo = cleanData($_POST['demo']);
    @$project_type = $_POST['project_type'];
    $content = $_POST['content'];
    $post_by = $_SESSION['user'];

    $errors = '';

    if (empty($title) or empty($demo) or empty($project_type) or empty($content)) {
        $errors .= '<p>Complete all the fields!</p>';
    } else {
        $statement = $connection->prepare("
            INSERT INTO posts (ID, title, demo, content, post_type)
            VALUES (null, :title, :demo, :content, :project_type)
        ");

        $statement->execute(array(
            ':title' => $title,
            ':demo' => $demo,
            ':project_type' => $project_type,
            ':content' => $content,
        ));

        $statement2 = $connection->prepare("
            INSERT INTO posts (post_by)
            VALUES ($post_by)
        ");

        $statement2->execute(array(
            $post_by
        ));

        header('Location: main.php');
    }   
}
?>
  

Как вы можете видеть, я использую 2 statement переменные для 2 консультаций SQL, но когда я это делаю, выдается эта ошибка:

 <b>Fatal error</b>:  Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cesar' in 'field list' in C:xampphtdocsbidertest2new.php:52
Stack trace:
#0 C:xampphtdocsbidertest2new.php(52): PDOStatement-amp;>execute(Array)
#1 {main}
  thrown in <b>C:xampphtdocsbidertest2new.php</b> on line <b>52</b><br />
  

Он помечает ‘cesar’, потому что это имя сеанса, я полагаю.
Кто-нибудь может помочь?

Комментарии:

1. php.net/manual/en/function.session-id.php

2. Да, вы можете, хотя почему?

3. Можно, но какой цели это послужит?

4. Это будет для того, когда пользователь создает новую запись, его имя пользователя сохраняется в базе данных сообщений, поэтому при отображении записи указывается, кем была загружена 🙂

5. В любом случае проблема во втором запросе — вы неправильно используете параметры. Сравните это с вашим первым и найдите разницу

Ответ №1:

Проблема во втором запросе — вы неправильно используете параметры. Сравните его с вашим первым и определите разницу в структуре. Вам нужно указать заполнитель :post_by в инструкции INSERT, чтобы PDO знал, куда привязать переменную, и вам нужно присвоить $post_by записи в массиве параметров то же имя, что и индекс, чтобы они совпадали.

Вот версия, которая будет работать:

 $statement2 = $connection->prepare(
  "INSERT INTO posts (post_by) 
   VALUES (:post_by)"
);

$statement2->execute(array(
  ":post_by" => $post_by)
);