2013-08-19 2 views
0

PDO (객체)를 사용하여 mysql-DB 항목을 INSERT하려고합니다. 사전에 PDO를 이해하지 못한 후에 나는이 질문을 재현했다.PHP PDO를 사용하여 삽입

문제는 아무 것도 DB에 추가되지 않지만 throw 된 예외가 발생하지 않는다는 것입니다. 나는 내가하려고하는 것을 성취하기위한 더 쉬운 방법이 있어야한다고 확신한다. 하지만 PHP와 SQL의 초보자인데 .. 어떤 도움이나 제안이라도 대단히 감사하겠습니다. 올바른 방법으로 다음

function INSERT($req) { 
try { 
    $db = new PDO('mysql:host=127.0.0.1;dbname=mcqsystem;charset=utf8', 'root', ''); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    //$values = explode(",", $req); 
    $values = array('question goes here', -1, 'a|b|c|d|e', '01', '0|', '0|', '0|', '0', '2', 'info text', '1', '23.01.2014', '-1', '28.12.2013 15:04:03'); 

    $stmt = $db->prepare("INSERT INTO _mcqs (`Question`, `PictureID`, `PossibleAnswers`, `CorrectAnswers`, `Categories`, `Courses`, `Tags`, `Variant`, `Flag`, `Information`, `Locked`, `ExamDate`, `AddedBy`, `AddedWhen`) VALUES(:question, :pictureid, :possibleanswers, :correctanswers, :categories, :courses, :tags, :variant, :flag, :information, :locked, :examdate, :addedby, :addedwhen)"); 
    $stmt->bindParam(':question', $values(0), PDO::PARAM_STR); 
    $stmt->bindParam(':pictureid', $values(1), PDO::PARAM_INT); 
    $stmt->bindParam(':possibleanswers', $values(2), PDO::PARAM_STR); 
    $stmt->bindParam(':correctanswers', $values(3), PDO::PARAM_STR); 
    $stmt->bindParam(':categories', $values(4), PDO::PARAM_STR); 
    $stmt->bindParam(':courses', $values(5), PDO::PARAM_STR); 
    $stmt->bindParam(':tags', $values(6), PDO::PARAM_STR); 
    $stmt->bindParam(':variant', $values(7), PDO::PARAM_STR); 
    $stmt->bindParam(':flag', $values(8), PDO::PARAM_INT); 
    $stmt->bindParam(':information', $values(9), PDO::PARAM_STR); 
    $stmt->bindParam(':locked', $values(10), PDO::PARAM_BOOL); 
    $stmt->bindParam(':examdate', $values(11), PDO::PARAM_STR); 
    $stmt->bindParam(':addedby', $values(12), PDO::PARAM_STR); 
    $stmt->bindParam(':addedwhen', $values(13), PDO::PARAM_STR); 

    $stmt->execute(); 

} catch(PDOException $ex) { 
    echo "ERROR @ INSERT: " . $ex->getMessage(); 
    some_logging_function($ex->getMessage()); 
} 
} 
+1

배열의 항목을 잘못 참조하고 있습니다. 대괄호 ('$ values ​​[0]')를 사용해야합니다. –

답변

1

됩니다 :

이 코드를 사용하고

function INSERT($db) 
{ 
    $values = array('question goes here', -1, 'a|b|c|d|e', '01', '0|', '0|', '0|', '0', '2', 'info text', '1', '23.01.2014', '-1', '28.12.2013 15:04:03'); 
    $stmt = $db->prepare("INSERT INTO _mcqs VALUES(?,?,?,?)"); // adjust number of ?s 
    $stmt->execute($values); 
} 
  • 이 모든 함수에 연결할 수 있지만, 모든 응용 프로그램
  • 에 대한 유일한 연결을 사용하지 않는
  • try..catch를 사용하여 오류를 기록하지 마십시오 - PHP가 더 잘 처리합니다.
  • al 이미 배열
+0

천 감사합니다. 많이 고맙습니다! – drumbun

0

당신은 ()를 사용하여 배열 항목에 액세스하지 않는이있는 경우 리터 필드는

  • 별도로 각 값을 결합하지 않습니다, 당신은 []을 사용해야합니다.

    $stmt->bindParam(':question', $values(0), PDO::PARAM_STR); // $values(0) is wrong 
    

    올바른 방법은이 모든 문이 아니라 하나의 적용

    $stmt->bindParam(':question', $values[0], PDO::PARAM_STR); 
                ^^ 
    

    입니다.

  • +0

    PHP 버전 5.5의 배열에는'()'을 사용할 수 있습니다. :) –

    +0

    그 정보에 감사드립니다. 답변은 다음 삭제되었습니다. –

    +1

    @YogeshSuthar 미안하지만 당신의 의견을 받아 들였습니다. 당신이 언급 한 내용이 유효하다고 생각하면 내 대답을 삭제했습니다. 내가 그것에 대해 조사를했는지 묻는 질문을 받았을 때 귀하의 의견이 유효하지 않고 원래의 대답이 틀리지 않았습니다. PHP 5.5에서도'()'를 사용하여 배열 항목에 접근 할 수 없습니다. 어떤 자원이라도 나에게 친절하게 링크 할 수 있습니까? –

    관련 문제