2013-10-24 8 views
0

После дезинфекции и проверки, которая работает нормально. Я попытался вставить данные в моей базе данных, но он продолжает говорить об ошибке: «К сожалению, мы не смогли подписать Вас ... Заполните форму правильно»Невозможно вставить данные в базу данных с помощью PDO

$qry = "INSERT INTO users (email, firstName, surname, userName, password, userDOB) values (?, ?, ?, ?, ?, ?)"; 

$q = $conn->prepare($qry) or die("ERROR: " . implode(":", $conn->errorInfo())); 

$q->bindParam(1, $email); 
$q->bindParam(2, $name); 
$q->bindParam(3, $surname); 
$q->bindParam(4, $username); 
$q->bindParam(5, $password); 
$q->bindParam(6, $userDOB); 

$q->execute(); 
if(!$q->execute()) { 
echo "<h1> Sorry, we were not able to sign you up... Refill the form properly </h1>"; 
} 
else { 
echo "<h1> Congratulations, $name ! You have been successfully signed up! </h1>"; 
} 

Любая помощь, которая сделает эту работу было бы весьма признателен ,

+0

любые ошибки? Вы также должны поймать исключение PDO, чтобы получить более подробный отчет об ошибке –

+0

http://stackoverflow.com/questions/3726505/how-to-squeeze-error-message-out-of-pdo –

+0

сделать что-то вроде '.. .} else {die ($ conn :: errorInfo); } ', поэтому БД может рассказать вам, что такое ошибка. фиксированные сообщения могут отображаться конечным пользователям, но при отладке НИКОГДА не используйте их, если они также не содержат фактические сведения о проблеме. –

ответ

0

Не уверен, что это проблема, но вы звоните execute() дважды.
В любом случае, единственной проблемой является отсутствие сообщений об ошибках. Включите его и запустите каждый оператор только один раз:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "INSERT INTO users (email, firstName, surname, userName, password, userDOB) 
        values (?, ?, ?, ?, ?, ?)"; 
$stm = $conn->prepare($sql)); 
$stm->execute([$email,$name,$surname,$username,$password,$userDOB]); 
if ($stm->rowCount()) 
{ 
    echo "<h1> Sorry, we were not able to sign you up... Refill the form properly </h1>"; 
} else { 
    echo "<h1> Congratulations, $name ! You have been successfully signed up! </h1>"; 
} 
0

Спасибо, ребята, много. Он работает, но лучше ли писать этот код и избегать SQL Injection?

try { 
     $conn = new PDO('mysql:host=localhost; dbname=userdetails', 'root', ''); 
     $conn->setAttribute(PDO:: ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     echo 'Connected!'; 
    } 
catch(PDOException $pe) { 
     echo('Connection error, because: ' .$pe->getMessage()); 
    } 

//Insert data to Database if values are not empty and sanitized 
if (!empty($_POST["firstName"]) && !empty($_POST["surname"]) && !empty($_POST["email"]) 
&& !empty($_POST["userName"]) && !empty($_POST["password"]) && $dob_day > 0 && $dob_month > 0 && $dob_year > 0) 
{ 
    $qry = "INSERT INTO users (email, firstName, surname, userName, password, birthday) values (?, ?, ?, ?, ?, ?)"; 

    $q = $conn->prepare($qry) or die("ERROR: " . implode(":", $conn->errorInfo())); 

    $q->bindParam(1, $email); 
    $q->bindParam(2, $name); 
    $q->bindParam(3, $surname); 
    $q->bindParam(4, $username); 
    $q->bindParam(5, $password); 
    $q->bindParam(6, $userDOB); 

    try { 
    $q->execute(); 
       echo "<h1> Congratulations, $name ! You have been successfully signed up! </h1>"; 
    } 
    catch(PDOException $pe) { 
     echo('Connection error, because: ' .$pe->getMessage()); 
    } 
} 
+0

Да, защита в порядке, но отчетность об ошибках и избыточная эффективность могут быть лучше. –

+0

Спасибо, @YourCommonSense. –

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