2012-05-28 2 views
-2

Мне нужно переписать весь мой код. Мне сказали, что в прошлый раз, когда я был здесь, мне нужно было выбрать между mysqli или PDO .. теперь я выбрал PDO, но должен сказать, что Я не понимаю вообще ничего ..Переход от операторов mysql к PDO

Например у меня есть этот кусок кода:

//get the email 
$email = mysql_real_escape_string($_POST['email']); 

//mysql query to select field email if it's equal to the email that we check ' 
$result = mysql_fetch_array(mysql_query("SELECT email FROM business_members WHERE email = '".$email."'")); 

//if number of rows fields is bigger them 0 that means it's NOT available ' 
if($result['email'] == $email){ 
//and we send 0 to the ajax request 
echo "0"; 
}else{ 
//else if it's not bigger then 0, then it's available ' 
//and we send 1 to the ajax request 
echo "1"; 
} 

существуют ли какие-либо сайты, которые могут помочь мне понять немного лучше, и я попытался прочитать на PHP -net, но это очень запутывает.

ответ

0

PHP файл, содержащий функции PDO:

<?php 
class example { 
    public function __construct() { 
     $this->db = new PDO('mysql:host=localhost;dbname=testdb;', 'user', 'password'); 
    } 

    public function checkMail($email) { 
     // This is the prepared SQL statement 
     // The values which you want to filter for in your WHERE clause, are replaced by ? 
     $sql = "SELECT 
        email 
       FROM 
        business_members 
       WHERE 
        email = ?"; 

     // Prepare the statement 
     $stmt = $this->db->prepare($sql); 

     // Bind a value to a question mark (the 1 means, the position of occurence of the question mark) 
     $stmt->bindParam(1, $email); 

     // Query the db, output debug info if query failed 
     if(!$stmt->execute()) { 
      // Only for debugging, don't use in production 
      var_dump($stmt->errorInfo()); 
     } 

     // Load result to var 
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     // Check amount of records 
     if(count($result) > 0) { 
      // Records found 
      return 1; 
     } else { 
      // No records found 
      return 0; 
     } 
    } 
} 
?> 

Главный файл:

<?php 
include 'includes/pdo.include.php'; 

$example = new example; 

echo $example->checkMail($_POST['email']); 
?> 
+0

ИЗУМИТЕЛЬНОЙ !! .. Большое спасибо. Но я должен спросить вас. Разве это не просто чертовски обидно, - что отныне вам нужно будет развернуть 5 строк кода на 22 строки кода ..? – Philip

+0

Ну, я думаю, что это выглядит чище, чем вещи mysqli. Кроме того, вам не нужно иметь дело с экранирующими строками, а назначение значений - более чистым. Вы привыкаете к этому, и в сочетании с ООП это довольно хороший материал. – Ahatius

+0

без сомнения .. единственное, что мне нужно сейчас, это понять его и научиться его использовать ... Но каждый раз, когда я читаю об этом, мне кажется это бессмысленно .. -.- ' – Philip

1

Лучше всего о PDO является то, что его объект ориентирован. Таким образом, сохраняя эту форму и максимально используя ее, мы можем создать класс PDO CRUD, который обрабатывает все ваши запросы к базе данных.

Ниже приведен пример, пользовательские методы/функции могут быть добавлены для расширения функциональных возможностей ЭСТА:

<?php 
Class PDO_CRUD{ 
    private $db; 

    function __construct($host,$dbname,$user,$pass){ 
     $this->dbhost = $host; 
     $this->dbname = $dbname; 
     $this->dbuser = $user; 
     $this->dbpass = $pass; 
    } 

    private function connect(){ 
     if (!$this->db instanceof PDO){ 
      $this->db = new PDO('mysql:dbname='.$this->dbname.';host='.$this->dbhost, $this->dbuser, $this->dbpass); 
      $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
    } 

    /*Raw Select*/ 
    public function rawQuery($sql){ 
     $this->connect(); 
     return $this->db->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
    } 

    public function get($table,$fieldname=null, $id=null){ 
     $this->connect(); 
     $sql = "SELECT * FROM $table WHERE $fieldname = :id"; 
     $statement = $this->db->prepare($sql); 
     $statement->bindParam(':id', $id, PDO::PARAM_STR); 
     $statement->execute(); 
     return $statement->fetchAll(PDO::FETCH_ASSOC); 
    } 

    /*Insert*/ 
    public function put($table,$values){ 
     $this->connect(); 
     $fieldnames = array_keys($values[0]); 
     $sql = "INSERT INTO $table "; 
     $fields = '('.implode(' ,', $fieldnames).')'; 
     $bound = '(:'.implode(', :', $fieldnames).')'; 
     $sql .= $fields.' VALUES '.$bound; 

     $statement = $this->db->prepare($sql); 
     foreach($values as $vals){ 
      $statement->execute($vals); 
     } 
    } 

    /*Update*/ 
    public function update($table,$fieldname, $value, $pk, $id){ 
     $this->connect(); 
     $sql = "UPDATE $table SET $fieldname = :value WHERE $pk = :id"; 
     $statement = $this->db->prepare($sql); 
     $statement->bindParam(':id', $id, PDO::PARAM_STR); 
     $statement->bindParam(':value', $value, PDO::PARAM_STR); 
     $statement->execute(); 
    } 

    /*Update Hits*/ 
    public function add_hit($table,$id){ 
     $this->connect(); 
     $sql = "UPDATE $table SET hits = hits + 1 WHERE url = :id"; 
     $statement = $this->db->prepare($sql); 
     $statement->bindParam(':id', $id, PDO::PARAM_STR); 
     $statement->execute(); 
    } 

    /*Delete*/ 
    public function delete($table,$id){ 
     $this->connect(); 
     $sql = "DELETE FROM $table WHERE url = :id"; 
     $statement = $this->db->prepare($sql); 
     $statement->bindParam(':id', $id, PDO::PARAM_STR); 
     $statement->execute(); 
    } 
} 

//Then we have a nice way to access all our querys from one class. 
//ini the model class 
$model = new PDO_CRUD('localhost','yourDB','User','Password'); 

$insert = array(array('id'=>NULL,'somecol'=>'someval')); 
$model->put('someTable',$insert); 

//multiple inserts 
$insert = array(array('id'=>NULL,'somecol'=>'someval123'), 
       array('id'=>NULL,'somecol'=>'someval1234'), 
       array('id'=>NULL,'somecol'=>'someval12345')); 
$model->put('someTable',$insert); 

//or delete a row 
$model->delete('someTable',1); 

//or a raw query 
$model->rawQuery('DELETE FROM someTable'); 
?> 
Смежные вопросы