簡體   English   中英

將腳本從mysql_ *重寫為PDO

[英]Rewriting script from mysql_* to PDO

我正在嘗試將簡單的插入和更新腳本從mysql_*重寫為PDO 我想我已經充分利用了它,但是有些事情我無法理解PDO的情況。 這是mysql的來源。

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部分正確嗎? 我的意思是可以重寫嗎?

您需要檢查插入了多少行

$result->rowCount()如果等於0,則查詢失敗。

在你的情況下

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

同樣,正如@Andrew所建議的那樣,ORM是更好的方法,並且更符合邏輯,可以檢查Doctrine / Propel ORM,它們確實是與DB一起使用的出色庫。

從手冊:

PDOStatement :: rowCount()返回受相應PDOStatement對象執行的最后一個DELETE,INSERT或UPDATE語句影響的行數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM