2013-05-12 68 views
0

我無法讓這個工作無法獲得「調用未定義的方法PDO :: execute()在C:\ xampp \ htdocs \ bookmarks \ index.php在第5行「簡單的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

你會得到什麼錯誤? – 2013-05-12 17:19:21

+0

而不是*連接後設置異常模式,[在連接時設置它](http://stackoverflow.com/questions/15990857/reference-frequently-asked-questions-about-pdo#15990858)。另外,不要使用try/catch來解決錯誤信息。它毫無意義且不安全 – 2013-05-12 17:28:26

+2

HTTP錯誤500本身不是錯誤,而只是一個存根。您需要閱讀錯誤日誌中的實際錯誤。最有可能它將與PDO無關 – 2013-05-12 17:35:10

回答

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

非常感謝,完全忘記了連接var不處理execute函數。 – 2013-05-12 18:01:17

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

謝謝,我相應地改變了連接參數。然而,我仍然得到錯誤。 – 2013-05-12 17:27:57

+0

@TimAych在你的問題中評論* Pekka * *;請顯示您收到的錯誤! – hjpotter92 2013-05-12 17:28:57

+0

是的,編輯錯誤到原來的帖子..「HTTP錯誤500(內部服務器錯誤):服務器試圖完成請求時遇到意外的情況。」 – 2013-05-12 17:32:08

1

我不知道到底,但我的方式創建連接字符串

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

我不知道如果有其他解決方法。我忘了它的數據庫還是dbname