2016-08-30 3 views
0

Я пытаюсь сделать инструкцию select и insert, используя PDO. Как вы можете видеть, мне удалось создать запрос для вставки в пользователей, и я получил сообщение, что левый узел 1 успешно добавлен. Однако проблема здесь в том, что я просматриваю базу данных sql. Нет записей моих данных. Я сделал инструкцию echo, и кажется, что мои переменные выводятся правильно.PDO insert и select statement

<?php 
include("connection.php"); 
if (isset($_POST['btn-signup'])) { 
     $uname  = trim($_POST['user_name']); 
     $uic  = trim($_POST['user_ic']); 
     $email  = trim($_POST['user_email']); 
     $upass  = trim($_POST['password']); 

     $new_password = password_hash($upass, PASSWORD_DEFAULT); 

    $query = $dbh->prepare("select * from users"); 
     $query->execute(); 
    if($query){ 
      while ($row = $query->fetch(PDO::FETCH_ASSOC)) { 
       $enroller_id3 = $row['enroller_ID']; 
       $test   = "left_mem"; 
      $test2  = "right_mem"; 
      $direc  = $direction; 
      } 
    } 


?> 
+0

Вы уязвимы для атак [SQL Injection] (http://bobby-tables.com) –

+0

Вы с помощью этого дважды ': enrolled_id_n, : enroller_id_n' ---' ": enrolled_id_n" => $ enrolled_id_n , ": enroller_id_n" => $ enroller_id_n, и, возможно, ошибка из-за возможного ограничения на дублируемую запись. –

+1

Вы также не выполнили '$ sql =" insert into personal_enrolled ... ', вы только подготовили его. –

ответ

1

Ваш код имеет много ошибок:

$query->execute(); 
if($query){ 

$query ваше заявление ручка и ВСЕГДА будет "истинным". Если execute() терпит неудачу, то ВОЗВРАЩАЕТ этот факт. $query не волшебным образом станет false.

Вы должны иметь:

$result = $query->execute(); 
if(!$result) { 

Тогда у вас есть это:

$query1 = "INSERT INTO users 
    (user_Name, user_ID, user_Email, user_Pass, enrolled_ID, enroller_ID, enroller_Postion, direction, country) 
VALUES 
    (:uname,    :email, :new_password,:enrolled_id_n, 
       :enroller_id_n, :uposition, :direc, :ucountry)"; 

Посмотреть что-нибудь не хватает там? У вас есть 9 полей и 8 параметров. Поскольку вы не пытаетесь проверить, удалось ли выполнить запрос, вы LIE об успехе операции.

+0

Плюс,' $ sql = "insert into personal_enrolled ...' только готов, никогда не выполняется. –

+0

идентификатор пользователя не увеличивается. Таким образом, я не вводил ни одного поля параметров для него, но он фактически успешно добавлен – stackoverflow

+0

невозможен. PDO ** СЛЕДУЕТ ** сбой с несоответствием поля/значения и/или недостаточными значениями, связанными с ошибкой параметров. поля и значения соответствуют 1: 1. mysql не будет «магически» пропускать из: uname ->: email и заполнить user_ID для вас. –