Php 将脚本从mysql_*重写为PDO

Php 将脚本从mysql_*重写为PDO,php,mysql,pdo,Php,Mysql,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

我正在尝试将简单的插入和更新脚本从
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"];
 }
}
这是我的try->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是更好、更符合逻辑的方法,检查条令/推进ORM,它们是与DB一起工作的非常好的库

从手册:

PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一个DELETE、INSERT或UPDATE语句影响的行数


您需要检查插入了多少行

$result->rowCount()
如果它等于0,则查询失败

就你而言

if($query->rowCount() > 0) {
另外,正如@Andrew所建议的,ORM是更好、更符合逻辑的方法,检查条令/推进ORM,它们是与DB一起工作的非常好的库

从手册:

PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一个DELETE、INSERT或UPDATE语句影响的行数


我可以推荐一个ORM,一些简单化的东西让你开始,也许。它真的可以减少常规和代码部署中的错误。谢谢你的评论。我也在考虑类似的东西,但我想首先了解一些简单的脚本和事情是如何工作的。这对我来说似乎有点先进。我可以吗建议一个ORM,一些简单化的东西,也许可以让你开始。它将真正减少常规和代码部署中的错误。谢谢你的评论。我也在考虑类似的东西,但我想首先了解一些简单的脚本和事情是如何工作的。这对我来说似乎有点高级。
if($query->rowCount()>0)
要替换
如果(!empty($query))
?好的,那么最后一部分呢-
$result=$pdo->updateQuery($update_query);
检查编辑的答案rowCount()将与删除插入或更新查询一起工作,因此您需要对
$pdo->updateQuery()
执行sam($update_query);变成just
$query->rowCount();
if($query->rowCount()>0)
替换
if(!empty($query))
?好的,那么最后一部分呢-
$result=$pdo->updateQuery($update_query);
检查编辑的答案rowCount()将使用DELETE INSERT或UPDATE query s,因此您需要对
$pdo->updateQuery()
so
$result=$pdo->updateQuery($UPDATE\u query);
执行sam,使其仅成为
$query->rowCount();