2016-05-20 2 views
-1

Я новичок в PHP и пытаюсь изучить OOP PHP.Вставьте данные в mysql с помощью OOP PHP и PDO

Я создаю регистрационную форму (простую), чтобы узнать OOP PHP, когда я отправляю данные, сообщение об успешности появляется, но данные не вставляются в базу данных.

Ниже мой код:

connection.php

<?php 

class DBConnection extends PDO 
{ 
    public function __construct() 
    { 
     $host='mysql:host=localhost;dbname=OOP'; 
     $user='root'; 
     $password=''; 
     parent::__construct($host,$user,$password); 
     $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     // always disable emulated prepared statement when using the MySQL driver 
     $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } 
} 

?> 

Index.php

<?php 
session_start(); 
/*include 'classes.php'; 
//$dbHandle = new DBConnection(); 
$ins=new basic_operation(); 
$ins->Insert_Data();*/ 



?> 


    <div class="col-lg-12"> 

     <div class="col-lg-1"></div> 

     <div class="col-lg-7"> 
      <form action="user_data.php" method="post" > 
       <input type="text" name="username" id="username" class="form-control"><br> 
       <input type="email" name="email" id="email" class="form-control"><br> 
       <input type="password" name="password" class="form-control" id="password"><br> 
       <input type="submit" name="submit" id="submit" value="submit"> 
      </form> 
        </div> 

       </div> 
<div> 
    <?php if (isset($_SESSION['insert'])) 
    { 
     echo $_SESSION['insert']; 
     unset($_SESSION['insert']); 
    } 

    ?></div> 

     </div> 
    </div> 

User_data.php

<?php 
session_start(); 
include 'classes.php'; 

    $insert=new basic_operation(); 
    $usr=$insert->Insert_Data(); 
    //return $insert; 
    $_SESSION['insert']='data inserted successfuly'; 
    header('location:index.php'); 

?> 

Classes.php

<?php 
include 'connection.php'; 

class basic_operation 
{ 

    public function Insert_Data() 
    { 
     if (isset($_POST['submit'])) { 
      $user = $_POST['username']; 
      $email = $_POST['email']; 
      $pass = $_POST['password']; 
      $smt = new DBConnection(); 
      $qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')"); 
      $qry->execute(); 

     } 
    } 
} 
?> 

Если кто знает, как выполнять основные операции CRUD (вставка, обновление, удаление, выберите) операцию в PHP с использованием объектно-ориентированного программирования PHP и PDO Затем предоставьте ссылку, источник , Пример, так что я могу узнать из него

Я искал в Интернете, но мог найти код подключения ... Ищете описательный ответ, так как я думаю, что этот вопрос также поможет многим людям, которые пытаются/хотите узнать ООП PHP.

Любая помощь будет оценена.

+0

Лучшее место для начала, конечно, [РНР Manual] (http://php.net/manual/en/book.pdo.php) – RiggsFolly

+4

Вы имели смысл установить PDO для использования 'PDO :: ERRMODE_EXCEPTION', но вы не используете блоки try/catch, чтобы поймать какие-либо заброшенные исключения, и поэтому вы не видите и ошибки, которые происходят – RiggsFolly

+0

Вы сами написали весь код? Если нет, то я рекомендую начинать все с нуля или вам нужно понять структуру кода. В приведенном выше коде входы не привязаны, и они непосредственно вставлены (риск ввода MySQL), а также функция «InsertData()» относится к одному типу данных. Если вы хотите, я бы переписал код в моем собственном стиле. – Rehmat

ответ

0

Используйте код ошибки try-catch, чтобы получить ошибки.

try { 
    $pdo = new PDO(
    'mysql:host=localhost;port=3306;dbname=your_db;charset=utf8mb4', 
    'user', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4") 
    ); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo 'Database connection has failed. Contact system administrator to resolve this issue!<br>'; 
    $e->getMessage(); 
    die(); 
} 

Включить отчет об ошибках в php (добавить это поверх скрипта php).

error_reporting(E_ALL); 

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

 $qry = $smt->prepare("INSERT INTO `student` (`User_Name`,`Email`,`Password`) 
           VALUES (:user,:email,:pass);"); 
     $qry->bindParam(':user', $user, PDO::PARAM_STR, 255); 
     $qry->bindParam(':email', $email, PDO::PARAM_STR, 255); 
     $qry->bindParam(':pass', $pass, PDO::PARAM_STR, 255); 
     $qry->execute(); 

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

Источник: Описание PDO :: цитаты в php.net

И последнее, но не в последнюю очередь ... Всегда используйте кавычку «`»в запросах MySQL правильно quote MySQL Keywords and Reserved Words, такие как ПАРОЛЬ. Вы используете его в своем запросе как поле, но не цитируете его.

0

На самом деле код работает нормально, когда я пытаюсь запустить его напрямую с помощью localhost без использования phpstorm, тогда он работает .. значит проблема в моей среде IDE.

Спасибо за ваши усилия.

0
`if (isset($_POST['submit'])) { 
     $user = $_POST['username']; 
     $email = $_POST['email']; 
     $pass = $_POST['password']; 
     $smt = new DBConnection(); 
     $qry = $smt->prepare("insert into student(User_Name,Email,Password) VALUES ('" . $user . "','" . $email . "','" . $pass . "')"); 
     $qry->execute(); 

    }` 

Попробуйте

if (isset($_POST['submit'])) { 
     $user = $_POST['username']; 
     $email = $_POST['email']; 
     $pass = $_POST['password']; 
     $smt = new DBConnection(); 
     $qry = $smt->prepare("INSERT INTO student(User_Name,Email,Password) VALUES (:user,:email,:pass)"); 
$qry->execute(array(':user'=>$user,':email'=>$email,':pass'=>$pass)); 

    } 

 Смежные вопросы

  • Нет связанных вопросов^_^