2016-11-30 4 views
-1

Я рассмотрел пару вопросов, связанных с этим, и большинство из них, кажется, отвечают на простые синтаксические ошибки. Я не думаю, что моя проблема - синтаксис.Соединение с БД выполнено успешно, но не отображается в MySQL

Я успешно подключаюсь к своему db, но я не могу видеть свои записи в phpmyadmin (где я просматриваю MySQL). Я могу повторять мои записи на другой странице как переменную, но я считаю, что мой вход не входит в базу данных.

Вот мой HTML код:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>student info</title> 
    </head> 
    <body> 
     <br> 
     Enter your first name and last name in the corresponding boxes. 
     <br> 
     <form action="submit.php" method="POST"> 
      First: <input type="text" name="firstname"/> 
     <br> 
      Last: <input type="text" name="lastname"/> 
     <br> 
     <input type="submit"> 
     </form> 


    </body> 
</html> 

Мой PHP для подключения к базе данных:

<?php 
echo 'here'; 
    $dsn = 'mysql:host=localhost;dbname=practice_students'; 


    try { 
     $db = new PDO($dsn); 
     echo 'db connection success'; 
    } catch (PDOException $e) { 
     $error_message = $e->getMessage(); 
     include('database_error.php'); 
     exit(); 
    } 

?> 

И мой PHP для страницы представления:

<?php 
echo 'here '; 
    $dsn = 'mysql:host=localhost;dbname=practice_students'; 


    try { 
     $db = new PDO($dsn); 
     echo 'db connection success'; 
     $firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING, 
       FILTER_SANITIZE_SPECIAL_CHARS); 
     $lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING, 
       FILTER_SANITIZE_SPECIAL_CHARS); 
     echo "Now we know your name! Hi," . " " . $firstname . " " . $lastname; 
    } catch (PDOException $e) { 
     $error_message = $e->getMessage(); 
     include('database_error.php'); 
     exit(); 
    } 
?> 

Все мобилизующих Ответ получен успешно у меня на местном компьютере

here db connection successNow we know your name! Hi, Maggie Bowen 

Однако MySQL не показывает записи, когда я пытаюсь выполнить CHECK или SELECT *.

enter image description here

enter image description here

Как я могу увидеть мои записи? Я знаю, что некоторые из моих дезинфекций и т. Д. Могут быть улучшены, но я бы просто хотел узнать, как увидеть мои записи и обеспечить их ввод в таблицу. Спасибо!

+0

Что вы с '$ db' после' $ db = new PDO ($ dsn); '? Кажется, ничего, или? – JustOnUnderMillions

+0

Ни в коем случае вы не пытаетесь * запросить * базу данных. Нет вставок, обновлений, выбора, ничего. '$ db' создается, а затем игнорируется. – aynber

+0

Я вынул $ username и $ password переменные, которые были частью PDO, но с этим кодом, и мой текущий оба имели те же проблемы –

ответ

3

У вас есть данные $ firstname и $ lastname. Теперь у вас есть insert их в базу данных, отправив запрос, используя PDO::query().

Что-то вроде этого:

$q = "INSERT INTO people (column1, column2) VALUES ('$firstname', '$lastname')"; 

$db->query($q); 

EDIT Использование подготовленных операторов, чтобы избежать SQL Injection атак

Wikipedia говорит

Подготовленные заявления являются устойчивыми против инъекции SQL, так как значения параметров, которые передаются позже с использованием другого протокола, не обязательно должны быть экранированы. Если исходный шаблон инструкции не получен из внешнего ввода, SQL-инъекция не может произойти.

Так рецензируемый код

$stmt = $db->prepare("INSERT INTO people (column1, column2) VALUES (:firstname, :lastname)"; 

$stmt->bindParam(':firstname', $firstname); 
$stmt->bindParam(':lastname', $lastname); 

$stmt->execute(); 

Благодаря ребятам из комментариев!

+1

'VALUES ($ firstname, $ lastname)' - Я сомневаюсь, что здесь целые числа. Строки требуют цитирования. В противном случае вы опубликуете ошибки синтаксиса. Это для будущих читателей для Q & A, которые могут думать, что то, что вы написали, является допустимым синтаксисом; которого нет. –

+0

[Little Bobby] (http://bobby-tables.com/) говорит *** [ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php) *** Узнайте о [подготовленных] (http://en.wikipedia.org/wiki/Prepared_statement) заявлениях для [PDO] (http://php.net/manual /en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и подумайте об использовании PDO, [это действительно очень легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

@ Fred-ii- вы правы, спасибо! – Jacopo