2014-03-19 48 views
0

我是PHP的新手,在學習完該語言的基礎知識之後,我已經學習了一些關於PDO的教程,並且只是想知道我的代碼是否正確,以及你們建議我可以改變它以使它更加完善安全,更快,更高效,你的名字...這是PDO好的代碼(PHP)嗎?

我遵循大量的教程來實現這個結果,因此我想我會問你們,因爲不是PHP上的每個Web上的教程(有這樣的很多)是學習最佳實踐和編寫優秀代碼的可靠來源。

這是我的代碼。它只將字符串'Bill Gates'插入到名爲'pdotest',表'tableOne'和行'rowOne'的數據庫中。我使用了持久數據庫連接,因爲這應該會使Web應用程序更快。我敢肯定,你們可以啓發我如何正確使用這個持久連接的東西,我可能還沒有完全理解如何在我的代碼中使用它。

<?php 

// DB connect configuration 
$user = 'user'; 
$pass = 'password'; 

// Database connection 
try { 
    $conn = new PDO('mysql:host=localhost;dbname=pdotest', $user, $pass, array(
     PDO::ATTR_PERSISTENT => true 
    )); 
} 
catch(PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    $conn = null; 
    die(); 
} 

// Data to insert (Bill Gates = Hero #1) 
$data = 'Bill Gates'; 

try { 
    // The insert query 
    $sql = "INSERT INTO tableone (rowOne) VALUES (:rowOne)"; 
    $q = $conn->prepare($sql); 
    $q->execute(array(':rowOne'=>$data)); 

    // Example INSERT query with multiple VALUES 
    // $q->execute(array(':rowOne'=>$data, ':rowTwo'=>$dataTwo)); 
} 
catch(PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    $conn = null; 
    die(); 
} 

?> 
+0

這個問題似乎是題外話,因爲它是關於代碼審查 – SergeS

+1

這個問題似乎是題外話,因爲它是http://codereview.stackexchange.com/ – easwee

回答

1

這顯然效率不高,因爲您的PHP必須運行比所需的多兩倍的代碼。
下面的代碼足夠

<?php 

// DB connect configuration 
$user = 'user'; 
$pass = 'password'; 
// Database connection 
$dsn = "mysql:host=localhost;dbname=pdotest;charset=utf8"; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$conn = new PDO($dsn, $user, $pass, $opt); 

$data = 'Bill Gates'; 

$sql = "INSERT INTO tableone (rowOne) VALUES (?)"; 
$q = $conn->prepare($sql); 
$q->execute(array($data)); 

一些亮點

  • 使用持久連接只有當你肯定知道你在做什麼
  • 組例外模式,如果你期待例外
  • DO NOT趕上他們只能死。 PHP可以自己死掉。
+0

更好的貼合非常感謝你爲腳本!它真的清理了我的代碼。 - 1)您能解釋一下關於持續連接的一些信息,爲什麼我需要知道我在做什麼? - 2)在學校,我總是學會做異常處理(儘管Java)。爲什麼應該或不應該使用異常處理? - 3)謝謝你這一點。所以PHP在需要時自己死()?所以沒有必要使用? – user2793161

+1

持久的連接可能會造成更多的傷害。你實際上並沒有處理你的例外,而只是殺死你的腳本。對於這種情況,PHP將以更優雅的方式處理未捕獲的異常,爲您提供更多信息和瀏覽器,並提供適當的HTTP響應代碼。 –

+0

嗨你的常識,你的代碼插入值兩次。當我插入字符串'Bill Gates'或其他任何東西時,它會插入兩行。 – user2793161