2013-12-23 5 views
-3

Я перестраиваю свой текущий скрипт для поддержки PDO вместо MySQL запросов. Я застрял в этом вставном запросе, хотя он не выполняется, и я не знаю, почему.PDO Вставить запрос не работает

Google'd немного, но ничего не мог найти.

   try 
       { 
        $sql = "INSERT INTO 
           news (news_name, 
            news_description, 
            news_author, 
            news_date, 
            news_link, 
            news_category) 
          VALUES ('" . trim($_POST['news_name']) . "', 
           '" . trim($_POST['news_description']) . "', 
           " . $_SESSION['admin_id'] . ", 
           NOW(), 
           '" . trim($_POST['news_link']) . "', 
           '" . trim($_POST['news_category']) . "' 
           )"; 
        $results = $db->exec($sql); 
        $id = $db->lastInsertId(); 

        if($results) 
        { 
         echo $id; 
         echo '<p>News item added succesfully</p>'; 
         echo '<a href="admin.php">Click here to return to the admin panel</a>';      
        } 
       } 
       catch(PDOException $e) 
       { 
        echo $e->getMessage(); 
       } 
      } 
      ?> 
+0

Не связывайте значения в свои запросы. Прочтите doco и примеры для ['PDO :: prepare'] (http://php.net/manual/pdo.prepare.php), [' PDOStatement :: bindParam'] (http://php.net/manual /pdostatement.bindparam.php)/['PDOStatement :: bindValue'] (http://php.net/manual/pdostatement.bindvalue.php) и [' PDOStatement :: execute'] (http://php.net /manual/pdostatement.execute.php) – Phil

+0

Кроме того, вам нужно установить атрибут 'PDO :: ATTR_ERRMODE' в' PDO :: ERRMODE_EXCEPTION', если вы хотите, чтобы он выдавал исключения. См. ['PDO :: setAttribute'] (http://php.net/manual/pdo.setattribute.php) – Phil

ответ

1

Во-первых, установить PDO бросать исключения, когда он сталкивается с ошибкой, если вы еще не ...

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Теперь подготовить INSERT заявление с параметрами

$sql = <<<_SQL 
INSERT INTO `news` (news_name, news_description, news_author, 
        news_date, news_link, news_category) 
VALUES (:name, :description, :author_id, NOW(), :link, :category) 
_SQL; 
$stmt = $db->prepare($sql); 

Затем выполните его с вашими значениями

И, наконец ...

catch(PDOException $e) 
{ 
    echo $e->getMessage();   
} 

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

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

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