gpt4 book ai didi

php - 将脚本从 mysql* 重写为 PDO

转载 作者:行者123 更新时间:2023-11-30 22:40:59 25 4
gpt4 key购买 nike

我正在尝试将简单的插入和更新脚本从 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() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

关于php - 将脚本从 mysql* 重写为 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com