gpt4 book ai didi

PHP 准备多列更新语句

转载 作者:行者123 更新时间:2023-11-29 05:58:08 24 4
gpt4 key购买 nike

我试图让我的代码运行得更流畅一些,但我遇到了麻烦。我正在尝试更新我的数据库,该数据库将只有 1 行和 15 列(这是一个包含分数和日期的排名表),但我使用的代码有点长,可能会彻底失败。这是我的代码:

  $sql = "UPDATE league SET t1b1='".$t1b1."'";
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1c1='".$t1c1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1d1='".$t1d1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1e1='".$t1e1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1f1='".$t1f1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1g1='".$t1g1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1h1='".$t1h1."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1b2='".$t1b2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1c2='".$t1c2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1d2='".$t1d2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1e2='".$t1e2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1f2='".$t1f2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1g2='".$t1g2."'";}
if ($conn->query($sql) === TRUE) {
$sql = "UPDATE league SET t1h2='".$t1h2."'";}
if ($conn->query($sql) === TRUE) {
} else {
echo "Error updating record: " . $conn->error;
}

我认为这可能会失败,因为例如,如果 t1b1 通过 t1h1 工作但 t1b2 失败,它只会更新数据库的一半,这是不可逆的。

我试过编写一个准备好的语句,以便它在一个查询中运行更新,但我无法弄清楚。我发现了这个更新单个条目的漂亮小示例:

public function update($content, $id) {
$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
$stmt->bind_param('si', $content, $id);
$stmt->execute();
return $stmt->affected_rows;
}

是否可以更改此代码,以便我可以准备一条语句来使用适当的变量更新所有 14 列?

最佳答案

我不推荐使用这种方法 "UPDATE league SET t1b1='".$t1b1."'"; 因为如果它是用户的输入你可以很容易地得到 SQL injected .

如果您只有 15 列,您可以创建一个简单的 map :

$map = [
't1b1' => $t1b1,
't1c1' => $t1c1,
't1d1' => $t1d1,
...
];

然后用它来创建一个占位符和一个参数数组:

$placeholder = "";
$params = [];
foreach($map as $key=>$val) {
$placeholder .= ",$key=?";
$params[] = $val;
}
// Cutting off the first ',' here
$placeholder = substr($placeholder, 1);

然后在您的查询中使用它:

$stmt = $this->mysql->prepare("UPDATE league SET $placeholder");
$stmt->execute($params);

关于PHP 准备多列更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47463111/

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