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

时间:2012-03-03 15:50:37

标签: php mysql sql

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

让我们说这是表格的结构。我想更新此表的每一行。

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

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

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

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

3 个答案:

答案 0 :(得分:12)

我会这样做:

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

这样你只执行一个命令,根据你的表大小,这应该很快

*编辑

答案 1 :(得分: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'");
        }
    }

答案 2 :(得分:0)

如果您首先使用mysql_connect()连接到数据库,那将会有效。

如果您只是一次性地执行此操作,那么您的解决方案就可以了 - 但如果您允许用户通过某种形式执行此操作,那么您就会遇到一个名为SQL Injection的安全漏洞。如果变量$ filename是由用户提交的,那么他们可以结束查询并开始一个新查询。您永远不应将未经过处理的数据放入MySQL查询中。

为了解决这个问题,可以通过mysql_real_escape_string放置$ filename,甚至更好地使用MySQLi或PDO提供的预处理语句。