gpt4 book ai didi

php - 更新数据库行,否则创建新行

转载 作者:行者123 更新时间:2023-11-29 17:49:57 25 4
gpt4 key购买 nike

我正在尝试使用REPLACE INTO来更新行(如果存在),否则它必须创建一个新行。

我正在使用NOVA框架。这是我得到的:

public function updateTicketRows($id,$ticketId, $row, $stock, $price)
{
$pdo = DB::getPdo();
return DB::raw('REPLACE INTO ticket_rows (id,ticket_id,row,stock,price)
VALUES('.$pdo->quote($id).','.$pdo->quote($ticketId).','.$pdo->quote($row).','.$pdo->quote($stock).','.$pdo->quote($price).')');
}

调用者:

foreach ($_POST['ticket'] as $ticket) {
$this->itemsModel->updateTicketRows($ticket['ticket_row_id'], $id,$ticket["ticket_row"],
$ticket["ticket_stock"],$ticket["ticket_price"]);
}

但是它就是行不通。不会创建新项目,也不会更新任何项目。

有人知道我该怎么做吗?

感谢您提前提供的帮助

最佳答案

您可以使用ON DUPLICATE KEY UPDATE来处理这种情况:

return DB::raw('INSERT INTO ticket_rows (id,ticket_id,row,stock,price) '.
'VALUES('.$pdo->quote($id).','.$pdo->quote($ticketId).','.$pdo->quote($row).','.$pdo->quote($stock).','.$pdo->quote($price).') '.
'ON DUPLICATE KEY UPDATE ticket_id='.$pdo->quote($ticketId).', row='.$pdo->quote($row).', stock='.$pdo->quote($stock).', price='.$pdo->quote($price).';');

...但是...看起来您正在使用 Laravel,因此您确实应该依赖 PDO 对象来保护您免受 SQL 注入(inject)。使用 ::raw() 可以绕过此保护。在这种情况下,您应该使用 updateOrCreate() 方法:

TicketRow::updateOrCreate(['ticket_id' => $ticketId], [
['row' => $row],
['stock' => $stock],
['price' => $price]
]);

第一个参数指定将记录分类为新记录或更新记录时要检查的属性。第二个参数传递要使用的值。

关于php - 更新数据库行,否则创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464095/

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