Получение комментариев пользователей из Mysql с помощью Php

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь разрешить пользователю комментировать профиль на моем веб-сайте. У меня есть следующий php — обновленный:

 <?php
// Insert Comments into Database that user provides
$comm = mysql_real_escape_string($_POST['addComment']);
$pID4 = filter_input(INPUT_GET, 'pID', FILTER_SANITIZE_NUMBER_INT);
$cID = mysql_real_escape_string($_POST['courseInfoDD']);
        $username = "###";
        $password = "####";
        $pdo4 = new PDO('mysql:host=localhost;dbname=###', $username, $password);
        $pdo4->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth3 = $pdo3->prepare('
        INSERT INTO Comment (info, pID, cID)
        VALUES(:info, :pID, :cID)
             ');
$sth3->execute(array(
            ':info' => $comm, ':pID' => $pID3, ':cID' => $cID
        ));
?>
  

http://postimage.org/image/16sbr0jd0 /
Таблица базы данных «Комментарий» (Модератор, пожалуйста, преобразуйте это в показ изображения, пожалуйста)

HTML:

 <input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />
  

Выдана ошибка:

No pID specified . Когда я пытаюсь вставить комментарий.

Ответ №1:

Вы используете одинарные кавычки в своем операторе insert :

 $sth3 = $pdo3->prepare('
    INSERT INTO Comment (info, pID, cID)
    VALUES($comm, $pID3, $cID)
');
  

С помощью этих простых кавычек, $comm не будут оцениваться — и литеральная $comm строка будет отправлена в базу данных, что приведет к тому, чего вы, вероятно, не совсем ожидаете.

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

Но, поскольку вы пытаетесь использовать подготовленные инструкции, это не то, что вам следует делать, на самом деле.

Вместо этого вам следует использовать заполнители в инструкции, а затем привязать их к вашим данным при выполнении инструкции.

Я полагаю, что ваш prepare будет выглядеть примерно так :

 $sth3 = $pdo3->prepare('
    INSERT INTO Comment (info, pID, cID)
    VALUES(:comm, :pID3, :cID)
');
  

Обратите внимание на заполнители :comm , :pID3 и :cID .

И затем, при выполнении инструкции, вы фактически передадите некоторые реальные данные, соответствующие заполнителям :

$sth3-> выполнить(array( ‘:comm’ => $comm, ‘:pID3’ => $pID3, ‘:cID’ => $cID, ));

Дополнительное примечание: поскольку вы используете подготовленные инструкции, вам не обязательно использовать mysql_real_escape_string() (которая, кстати, не связана с PDO и должна использоваться только при работе с mysql_* функциями) : экранирование выполняется самим механизмом подготовленных инструкций.

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

1. Смотрите мой обновленный код, этот метод ‘prepare’, похоже, не захватывает pID в строке ‘$pID3 = filter_input(INPUT_GET, ‘pID’, FILTER_SANITIZE_NUMBER_INT);’ где $ pID3 подготавливается как var.

2. Почему при этом не передается pID?

Ответ №2:

Параметры подготовленной инструкции PDO следует использовать следующим образом:

 $sth3 = $pdo3->prepare('
        INSERT INTO Comment (info, pID, cID)
        VALUES(:info, :pID, :cID)
             ');
$sth3->execute(array(
            ':info' => $comm, ':pID' => $pID3, ':cID' => $cID
        ));
  

Сначала настройте «слоты» для значений, затем укажите их при выполнении запроса.

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

1. Если я попробую это и попытаюсь отправить комментарий, он выдает ошибку о том, что для «профессора» не найден «pID». Должен ли я добавить это в запрос ‘WHERE pID = ?’ ?

2. @user700070: Нет, WHERE не используется во вставках. Похоже, что pID должен быть частью переменных GET вашего URL, как в /addcomment.php?pID=3 .

3. @user700070: Вы добавили ?pID=3 в действие формы? Это должно сработать. Хотя я бы рекомендовал вам также переместить pID в поля POST для большей ясности.

Ответ №3:

Переменные $ в строках, заключенных в одинарные кавычки, не обрабатываются. Вместо этого используйте двойные кавычки и добавляйте кавычки для самого оператора SQL:

 $sth3 = $pdo3->prepare("
        INSERT INTO Comment (info, pID, cID)
        VALUES('$comm', '$pID3', '$cID')
             ");
  

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

1. Учитывая, что он использует подготовленные инструкции, значения не должны вводиться в запрос — вместо этого они должны быть привязаны при выполнении инструкции.

Ответ №4:

наша проблема не имеет ничего общего ни с mysql, ни с комментариями.

Это базовый синтаксис PHP strings.

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

Однако вы не должны добавлять переменные непосредственно в запрос, а скорее удалять их

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

1. Однако, если я протестирую это, это не вызовет pID.