使用PHP在mySQL数据库中更新表中的每一行

3
  Table
*------------------------------------------------*
|    id    |    title   |    filename            |
*------------------------------------------------*

假设这是表的结构。我想更新这个表的每一行。

假设我想用下划线替换文件名中的每个空格。

$new_filename = str_replace(" ", "_", $filename);

mysql_query("UPDATE table SET Filename = '$new_filename'");

这不起作用。每行有不同的文件名。


所以每一行都有不同的文件名,在每一行中,您想要将这些文件名中的空格替换为下划线? - dldnh
1
如果你尝试一下会发生什么? - Brian Roach
Brian,因为文件名未设置,在命令执行后表中所有行的文件名都为空。 - 2by
3个回答

12

我会简单地这样做:

mysql_query("UPDATE table SET Filename = REPLACE(Filename, ' ', '_')");

通过这种方式,您只执行了一个命令,根据表的大小,这应该会非常快速。

*编辑过


谢谢!如果我想搜索并替换任何文件名与搜索匹配的行,怎么办? - 2by
1
你只需要添加一个where子句,例如:WHERE filename = 'Some file'。更多信息请参考:http://dev.mysql.com/doc/refman/5.0/en/where-optimizations.html 和 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html。 - Book Of Zeus
这是一个很好的方法,但我更感兴趣的是一个通用的答案。比如说,如果更改不是那么简单呢?例如,数据库条目包含一个短的HTML片段,其中包含视频嵌入代码和其他一些内容。我想将该嵌入代码更改为HTML5规范,并将这些数字更改为f(原始数字)。我想这需要通过php查询,然后更新其中的行。 - iankit

3

第一个答案更好:)

所以你的文件名在每一行都相同吗?否则,此代码将替换所有文件名为同一个名称。你需要一个for循环从表格中获取数据并更新它。

像这样:

    $query = "SELECT id, filename FROM table";
    $result = mysql_query($query); 
    if($result){
        $num = mysql_numrows($result);
        $i=0;
        while ($i < $num) {
            $new_filename = str_replace("_", " ", mysql_result($result,$i,"filename"));
            $id = mysql_result($result,$i,"id");
        mysql_query("UPDATE table SET filename = '$new_filename' WHERE id='$id'");
        }
    }

这篇回答对我帮助更大,因为我需要的更新在 SQL 中非常困难。 - Jason Kennaly

0

只要您先使用mysql_connect()连接到数据库,那么这将起作用。

如果您只是偶尔这样做,那么您的解决方案就很好 - 但是如果您允许用户通过某种形式的表单来执行此操作,则存在SQL注入安全漏洞。如果变量$filename由用户提交,则他们可以结束查询并启动新查询。您永远不应该将未经过处理的数据放入MySQL查询中。

为了解决这个问题,请将$filename通过mysql_real_escape_string进行处理,或者更好地使用MySQLi或PDO提供的预处理语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接