2013-12-23 8 views
-3

MySQL 쿼리 대신 PDO를 지원하도록 현재 스크립트를 재구성하고 있습니다. 이 삽입 쿼리에 붙어있어, 그것은 실행되지 않습니다 그리고 난 아무 이유도 없어.PDO 삽입 쿼리가 작동하지 않습니다.

Google은 조금 주위를 돌았지만 아무 것도 찾을 수 없었습니다.

   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와 examples for ['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

는 첫째,

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

, 매개 변수와 함께 INSERT 문을 준비 아직 확인하지 않은 경우 오류가 발생하면 ... 예외를 던져 PDO를 설정

$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); 

그런 다음 값으로 실행하십시오.

$stmt->execute([ // PHP 5.4 short array syntax, use array(...) if not available 
    ':name'  => trim($_POST['news_name']), 
    ':description' => trim($_POST['news_description']), 
    ':author_id' => $_SESSION['admin_id'], 
    ':link'  => trim($_POST['news_link']), 
    ':category' => trim($_POST['news_category']) 
]); 

그리고 마지막으로 ...

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

이 작업을 수행하지 마십시오. 최종 사용자에게 내부 정보를 노출 할뿐만 아니라 아무 일도없는 것처럼 프로그램을 계속 진행할 수 있습니다.

개발할 때 예외가 처리되지 않게되어 실행이 종료됩니다. 프로덕션 환경에서 사용자에게 친숙한 오류 메시지를 표시하면서 문제를 기록 및/또는 알릴 수있는 고급 예외 처리기를 구현하십시오.

관련 문제