2015-08-09 4 views
0

Итак, я пытаюсь сделать это в течение нескольких дней, и я читал всевозможные учебники, но мне, кажется, что-то не хватает, потому что я все еще могу " Получить его. Я работаю над изучением веб-форм и вводом ввода формы в соответствующую базу данных. Я могу взять информацию из формы и повторить ее на странице результатов, поэтому я знаю, что все работает. но я не могу получить ввод формы для входа в мою базу данных. Я знаю, что соединение работает, поэтому в моем синтаксисе должно быть что-то не так.Попытка вставить новую строку в базу данных с помощью PDO

PHP

//DB Configs 
    $username = null; 
    $password = null; 

    try { 
     $db = new PDO("mysql:host=localhost;dbname=Testing3", $username, $password); 
     //Set the PDO error mode to exception (what does this mean?) 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     //Prepare SQL and bind parameters 
     $sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Name`) 
      VALUES (:name)"); 

     //Insert a Row 
     $species = $_POST['Species']; 
     $sql->execute(array(':name'=>$species)); 

    } 
    catch (PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC'); 
    //Query 
    /* 
    $input = $db->query("INSERT INTO `NFK_Species` (`Id`, `Name`) VALUES (Null, `$species`)"); 

    $result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC');*/ 

    //Kill Connection 
    $db = Null; 
} 

HTML/PHP (веб-страницы)

<h1>Inserting a New Species into Database:</h1> 
    <h3>Results</h3> 
    <?php 
    if ($sql->execute()){ 
     echo "Data input was successful"; 
     while ($rows = $result->fetch()){ 
      echo $rows['Name']; echo ", "; 
     } 
    } else { 
     echo "Data input failed."; echo mysql_error(); 

    } 
    ?> 

Это только моя текущая попытка сделать это. Я предпочитаю попытку, которую я имел раньше, с bindParam и простой execute(), поэтому, если бы я мог заставить это работать, я был бы признателен. Следующий пример также содержит столбец Id для этой таблицы. Это столбец с автоматическим приращением, который я читаю, не обязательно должен быть включен, поэтому я исключил его из моей недавней попытки. Это верно?

Прошлое PHP

//Prepare SQL and bind parameters 
     $sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Id`, `Name`) 
      VALUES (Null, :name)"); 
     $sql->bindParam(':name', $species); 

     //Insert a Row 
     $species = $_POST['Species']; 
     $sql->execute(); 

Я читал кучу учебников (или пытаются), в том числе попытки расшифровать PHP.net учебники, но все они, кажется, написана для тех, кто уже есть хорошая ручка на этом и опыт в том, что происходит, и я очень новичок во всем этом.

+2

показать нам форму тогда. Плюс 'mysql_error()', если это часть вашего рабочего кода, он не относится к PDO. Вы также используете этот '$ species = $ _POST ['Species'];' ** после ** вы привязываетесь. –

+1

Удалите 'if ($ sql-> execute()) {}' из цикла выборки, потому что _already_ выполнил оператор. Поскольку он завернут в 'try/catch', вы можете перейти непосредственно в цикл выборки. –

+0

В блоке «Предыдущий PHP» у вас есть строка привязки, прежде чем вы установите переменную вида. Это не здесь и не там, потому что первый пример выглядит хорошо. Какие результаты вы получаете - какая ошибка sql вызывается – dlporter98

ответ

0

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

Debugging:

Поэтому код размещен выше ломал мой код, то есть моя страница не будет загружаться. Я понял, что это означало, что где-то была синтаксическая ошибка, но я не мог ее найти, и никто ее еще не нашел. Кроме того, это означало, что мои Error Alerts не работали, чтобы сообщить мне, в чем проблема. Если вы посмотрите на исходный образец PHP, вы увидите, что внизу внизу находится один "}", который просто болтается и не имеет никакой цели, но что более важно, он разбивает код (глупый, гиперчувствительный PHP-код). Поэтому я избавился от этого, и затем мои сообщения об ошибках начали работать. Он сказал, что не могу подключиться к моей базе данных. Поэтому я просматриваю синтаксис входа в базу данных, который выглядел отлично, и тогда вы заметите в своем первом примере PHP, что мне удалось установить $username и $password на NULL. Ясно, что это неверно. Поэтому я исправил это, и в следующий раз, когда обновил свою страницу, я успешно ввел строку в мою базу данных! (Яй)

Примечание:

В моем исходном образце PHP, я включил Id столбец, который автоматически увеличивается, для вставки строки, со значением NULL. Это сработало, и оно вставило строку. Затем я экспериментировал с тем, чтобы полностью отказаться от него, и он все еще работал. Поэтому обновленный рабочий код ниже не содержит идентификатор вида.

Рабочий код:

<body> 
    <h1>Inserting a New Species into Database:</h1> 
    <h3>Results</h3> 

    <?php 

     //DB Configs 
     $username = root; 
     $password = root; 

     try { 
      //Connect to Database 
      $db = new PDO("mysql:host=localhost;dbname=Testing3", $username, $password); 
      //Enable PDO Error Alerts 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      //Prepare SQL statement and bind parameters 
      $sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Name`) VALUES (:name)"); 
      $sql->bindParam(':name', $species); 

      //Insert a Row 
      $species = $_POST['Species']; 
      $sql->execute(); 

      // Echo Successful attempt 
      echo "<p class='works'><b>" . $species . "</b> successfully added to database.</p></br></br>"; 

     } 
     catch (PDOException $e) { 
      echo "Error: " . $e->getMessage(); 
     } 

     // Gather updated table data 
     $result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC'); 

     //Kill Connection 
     $db = Null; 

    while ($rows=$result->fetch()){ 
     echo $rows['Id']; echo " - "; echo $rows['Name']; echo "</br>"; 
    } 
    ?> 

<body> 
Смежные вопросы