繁体   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