gpt4 book ai didi

php - 将列/变量添加到 PDO FetchAll 行

转载 作者:搜寻专家 更新时间:2023-10-30 22:02:29 26 4
gpt4 key购买 nike

我刚开始使用 PDO,遇到了一些困难 - 有什么方法可以向返回的 fetchAll 数组添加一行吗?

我想在行中使用一个值并从中创建一个新值。我希望我的例子足够清楚-

 class.php
--------------------
class connect
{
//all PDO database connection functions here
}

class Display
{
function cars($colour)
{
$crud = new crud();
$crud->conn();
$sql = "SELECT * FROM cars WHERE colour=:colour";
$stmt = $crud->db->prepare($sql);
$stmt->bindParam(':colour', $colour);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

****WHAT I WANT TO DO (see edit)*****
foreach ($rows as $row)
{
ADD A ROW CALLED 'newprice' that equals ($row['oldprice'] + 300 / 2)
}


$this->results = $rows;
}
}


index.php
--------------------
//other html code...

$D = new Display;
$D->cars('1');
foreach($D->results as $row)
{
?>

<div class="car">
<h1>Car Name:</h2>
<?=($row['model']);?>
Old Price:
<?=$row['price'];?>
New Price:
<?=($row['newprice']);?> <- outputting the new row I created
</div>
}?>

这可以做到还是有其他更有效的方法?

抱歉,我想我的示例不是很清楚!我想做的不仅仅是在数学上改变新列的值——我想 preg_split/通过另一个类等运行它!

到目前为止,我得到的最佳解决方案是从 PDO 提供的数组创建一个新的多维数组,然后添加/编辑该数组,如下所示:

     $new=array();
$key_loop = 0;
$row_loop = 0;

foreach ( $rows as $val )
{
$keys = array_keys($val);
foreach ($keys as $key)
{
$new[$row_loop][$keys[$key_loop]] = $val[$keys[$key_loop]];
$new[$row_loop]['new_entry'] = 'this works';
$key_loop++;
}
$row_loop++;
$key_loop = 0;
}

最佳答案

所以,这段代码是我头脑中的一个快速写成的(即没有保证),但我认为这样的东西对你有用。

...

foreach ($rows as $row)
{
// Get old price
$old_price = $row['oldprice'];

// Do some stuff with old price
$new_price = changeOldPrice($old_price);


// Insert new price into same row, under the newprice column
$sql = "UPDATE cars SET newprice=? WHERE id=?";
$stmt = $crud->db->prepare($sql);
$stmt->execute( array(':newprice' => $new_price, ':id' => $row['id']) );
}

...

public function changeOldPrice($old_price)
{
// Some random regular expression split
$new_price = preg_split("[,]+", $old_price)

// Pass to random class
$myClass = new MyClass;
$new_price = $myClass->doSomethingCool($new_price);

// Return
return $new_price;
}

现在有个坏消息,很多正在运行的 UPDATES 会严重降低性能。一种解决方案是使用 transactions一次写下所有这些。

[编辑]为响应您的编辑,请查看更新后的代码。

关于php - 将列/变量添加到 PDO FetchAll 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435244/

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