2013-05-12 3 views
0

5 행의 "정의되지 않은 메소드 PDO :: execute()를 C : \ xampp \ htdocs \ bookmarks \ index.php에 호출하면이 작업을 수행하는 데 문제가 있습니다. "간단한 PDO 연결/준비 문 쿼리

<?php 

    function addBookmark($url, $conn){ 
     $conn->prepare('INSERT INTO entries (url) VALUES (:url)'); 
     $conn->execute(array(':url' => $url)); 
    } 

    try { 
     $conn = new PDO('mysql:dbname=bookmarks;host=localhost', 'username', 'password'); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     if(isset($_POST['bookmark'])) { 
      addBookmark($_POST['bookmark'], $conn); 
     } 

     $results = $conn->query('select * from bookmarks.entries'); 

    } catch (exception $e) { 
     die($e->getMessage()); 
    } 

?> 

저는 PDO로 오늘 속이기 시작 했으므로 개념을 가장 잘 이해하지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+1

어떤 오류가 있습니까? –

+0

* 연결 후 예외 모드 *를 설정하는 대신 [연결시 설정] (http://stackoverflow.com/questions/15990857/reference-frequently-asked-questions-about-pdo#15990858). 또한 try/catch를 사용하여 오류 메시지를 중지하지 마십시오. 그것은 무의미하고 안전하지 않습니다. –

+2

HTTP 오류 500은 오류 자체가 아니라 스텁 일뿐입니다. 실제 오류에 대한 오류 로그를 읽어야합니다. 대부분 PDO와 관련이 없습니다. –

답변

2
function addBookmark($url, $conn){ 
    $stmt = $conn->prepare('INSERT INTO entries (url) VALUES (?)'); 
    $stmt->execute(array($url)); 
} 
+0

감사합니다. 연결 var가 실행 기능을 처리하지 않는다는 사실을 완전히 잊어 버렸습니다. –

2

연결 문자열이 약간 잘못되었습니다.

'mysql:bookmarks' 

도 호스트가 있어야합니다. 및 bookmarks 내가 데이터베이스 이름을 생각하는 것입니다!

'mysql:dbname=bookmarks;host=localhost' 

$conn->prepare('INSERT INTO entries (url) VALUES (:url)'); 
$conn->execute(array(':url' => $url)); 
다음과 같이

요구 는 다시 :

$stmt = $conn->prepare('INSERT INTO entries (url) VALUES (:url)'); 
$stmt->execute(array(':url' => $url)); 
+0

감사합니다. , 그에 따라 연결 매개 변수가 변경되었습니다. 나는 아직도 오류가 있습니다. –

+0

@TimAych 귀하의 질문에 * Pekka 웃 *로 댓글을 달았습니다; 당신이 받고있는 오류를 보여주십시오! – hjpotter92

+0

예, 원래 게시물에 오류를 편집했습니다. "HTTP 오류 500 (내부 서버 오류) : 서버가 요청을 수행하는 동안 예기치 않은 상황이 발생했습니다." –

1

내가 정확히 몰라,하지만 방법은 내가 연결 문자열 내가 잘 모릅니다

mysql:host=localhost;database=database 
mysql:host=localhost;dbname=database 

입니다 만들 다른 해결 방법이 있다면. 데이터베이스 또는 dbname 여부를 잊었습니다