2015-07-01 2 views
1

Я пытаюсь переписать простой скрипт вставки и обновления с mysql_* на PDO. Я думаю, что я сделал это больше всего, но есть кое-что, что я не могу понять, как будет в PDO. Это источник mysql.Сценарий перезаписи из mysql_ * в PDO

if(!empty($_POST["image_id"])) { 
require_once("dbcontroller.php"); 
$db_handle = new DBController(); 
$query = "INSERT INTO ipaddress_vote_map (ip_address,image_id,vote_rank) VALUES ('" . $_SERVER['REMOTE_ADDR'] . "','" . $_POST["image_id"] . "','" . $_POST["vote_rank"] . "')"; 
$result = $db_handle->insertQuery($query); 
if(!empty($result)) { 
    $query = "SELECT SUM(vote_rank) as vote_rank FROM ipaddress_vote_map WHERE image_id = '" . $_POST["image_id"] . "' and ip_address = '" . $_SERVER['REMOTE_ADDR'] . "'"; 
    $row = $db_handle->runQuery($query); 

    switch($_POST["vote_rank"]) { 
     case "1": 
      $update_query ="UPDATE images SET votes = votes+1 WHERE image_id='" . $_POST["image_id"] . "'"; 
     break; 
     case "-1": 
      $update_query ="UPDATE images SET votes = votes-1 WHERE image_id='" . $_POST["image_id"] . "'"; 
     break; 
    } 

    $result = $db_handle->updateQuery($update_query); 
    print $row[0]["vote_rank"]; 
} 
} 

И это моя попытка -> PDO

if(!empty($_POST["image_id"])) { 
include 'misc/database.inc.php'; 
error_reporting(E_ALL^E_NOTICE); 
ini_set('display_errors', 1); 
$pdo = Database::connect(); 

$query = $pdo -> prepare("INSERT INTO ipaddress_vote_map (ip_address,image_id,vote_rank) 
          VALUES (:remote_address, :image_id, :vote_rank)");  
$query -> execute(array(
        "remote_address" => $_SERVER['REMOTE_ADDR'], 
        "image_id"   => $_POST['image_id'], 
        "vote_rank"   => $_SERVER['vote_rank'] 
));  

if(!empty($query)) { 
    $query = $pdo -> prepare("SELECT SUM(vote_rank) as vote_rank FROM ipaddress_vote_map WHERE image_id = :image_id and ip_address = :remote_address"); 
    $query -> execute(array(
      "remote_address" => $_SERVER['REMOTE_ADDR'], 
      "image_id"   => $_POST['image_id']     
    )); 

    switch($_POST['vote_rank']){ 
     case '1': 
     $update_query = $pdo -> prepare("UPDATE images SET votes = votes+1 WHERE image_id= :image_id"); 
     $update_query -> execute(array(
      'image_id' => $_POST['image_id'] 
     )); 
     break; 
     case '-1': 
     $update_query = $pdo -> prepare("UPDATE images SET votes = votes-1 WHERE image_id= :image_id"); 
     $update_query -> execute(array(
      'image_id' => $_POST['image_id'] 
     )); 
     break;    
    } 
    $result = $pdo->updateQuery($update_query); 
    print $row[0]["vote_rank"]; 
} 
Database::disconnect();  
} 

То, что я не могу понять, как сделать это после того, как оператор INSERT мне нужно сделать что-то вроде этого

$result = $db_handle->insertQuery($query); 

и как будет в PDO? Потому что я работаю с $query - if(!empty($query)) {..., и я не уверен, что это правильно. Также последняя часть

$result = $pdo->updateQuery($update_query); 
print $row[0]["vote_rank"]; 

Как будет в PDO?

Правильно ли это часть PDO? Я имею в виду, переписываю ли это нормально?

+0

Могу ли я предложить ORM, что-то упрощенное, чтобы вы начали, возможно [Idiorm] (https://idiorm.readthedocs.org/en/latest/). Это действительно сократит ошибки в генералах и развертывании кода. – Andrew

+0

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

ответ

0

Вы должны проверить, сколько строк были вставлены с

$result->rowCount() если он равен 0, то запрос не удалось.

в вашем случае

if($query->rowCount() > 0) { 

Кроме того, как предложил ORM @ Андрей лучше и логический подход проверить Doctrine/Propel ORM они действительно большие библиотеки для работы с БД.

Из инструкции:

PDOStatement :: ROWCOUNT() возвращает количество строк, затронутых в последнем INSERT, DELETE или UPDATE заявление, выполняемом соответствующего объекта PDOStatement.

+0

'if ($ query-> rowCount()> 0)' заменить 'if (! Empty ($ query))'? – Jared

+0

да, как я написал в ответ. – Robert

+0

Хорошо, а как насчет последней части - '$ result = $ pdo-> updateQuery ($ update_query);' – Jared

Смежные вопросы