【问题标题】:PHP->sql UPDATE row with data from 2 other rows merged together within the same tablePHP-> sql UPDATE 行与其他 2 行的数据在同一个表中合并在一起
【发布时间】:2011-09-28 14:11:38
【问题描述】:

表 = 位置 字段 = 地址、街道、郊区

地址字段最初为空,填充街道和郊区。我试图用街道和郊区数据更新地址字段,但它不起作用。只允许我更新一个字段。使用下面的代码,地址字段将被更新为 0...但是如果我从更新中删除其中一个变量,那么它将仅使用街道或郊区正确更新。

我这样做的原因是因为数据提供给我的方式是这种格式,我手动完成它需要很长时间。

while ($row=$result->fetch_assoc()) {

    $street=$row['street'];
        $suburb=$row['suburb'];

        $mysqli->query("UPDATE address SET address = $street+$suburb");
        echo($street);
}
}

【问题讨论】:

  • 注意:您的示例末尾有一个额外的右括号。

标签: php mysql database field


【解决方案1】:

不要忘记在 UPDATE 查询中添加 WHERE 子句,除非您希望整个表具有相同的地址列。试试这个

while ($row=$result->fetch_assoc()) {

        $street=$row['street'];
        $suburb=$row['suburb'];
        $address=$street." ".$suburb;
        $id=$row['id'];

        $mysqli->query("UPDATE address SET address = `".address."` WHERE id=".$id);

}

【讨论】:

    【解决方案2】:

    试试

     $mysqli->query("UPDATE address SET address ='". $street." ".$suburb."' WHERE street = '$street' AND subrub = '$subrub'");
    

    + 不是 php 中的连接运算符。所以尝试使用.

    另外,如果你没有WHERE 子句,那么所有的行都会被更新!!!

    【讨论】:

    • 这可行,但它会使用郊区和街道字段的最后一行数据更新所有字段。
    • 查看编辑。您第一次发布的查询中存在问题。没有WHERE 子句
    • 谢谢!这样可行。是否可以更新街道和郊区之间的空间?因为现在它以“TEST ROADMANCHESTER”的形式出现
    • 嘿,巴尔瓦尼什。我遇到了一个问题...郊区之一叫奥康纳。它不会更新我认为的地址字段,因为 '.无论如何要解决这个问题?
    • 您需要先对输入进行转义,然后再将其存储到数据库中。您可以使用htmlspecialchars()mysql_real_escape_string 转义 PHP 中的特殊字符
    【解决方案3】:

    尝试:

    while ($row=$result->fetch_assoc()) {
    
        $street=$row['street'];
            $suburb=$row['suburb'];
        $address = $street.$suburb;
    
            $mysqli->query("UPDATE address SET address = '$address'");
            echo($street);
    }
    }
    

    【讨论】:

    • + 不是 php 中的连接运算符
    【解决方案4】:

    您不必将结果提取到 PHP,然后为每一行运行 UPDATE。看来您现在正在向数据库发送一个SELECT大量(数千或数百万,取决于您的表的大小)UPDATE 语句。

    您可以使用 一个 UPDATE 语句更新整个表(所有行!):

    "UPDATE location SET address = CONCAT(street, ' ', suburb) ;" 
    

    如果(稍后)您的某些行在 address 列中已有数据,则只能更新地址为空的行:

    "UPDATE location
     SET address = CONCAT(street, ' ', suburb) 
     WHERE address = ''
        OR address IS NULL ;"  
    

    您还应该检查address 字段的大小是否大于或至少等于CHAR_LENGTH(street) + CHAR_LENGTH(suburb) + 1 的最大值

    【讨论】:

    • 顶部的不起作用,底部的没有尝试过,因为它不需要。
    • @user829206:你得到什么错误?你的表是 location 还是 address
    • 你的描述是location,你的代码是UPDATE address
    • 我的表被称为位置...我粘贴的代码是我以前使用的数据库,但我创建了一个新的数据库来重新开始调用位置,所以不要介意。
    • 确实有效!我的查询 SELECT FROM 中有错误。正在使用旧表啊哈哈。我应该在while循环中有你的代码吗?那不会仍然执行与行一样多的次数吗?
    猜你喜欢
    • 2022-01-21
    • 2013-07-19
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多