Table
*------------------------------------------------*
| id | title | filename |
*------------------------------------------------*假设这是表的结构。我想要更新这个表的每一行。
假设我想用下划线替换Filename中的每个空格。
$new_filename = str_replace(" ", "_", $filename);
mysql_query("UPDATE table SET Filename = '$new_filename'");这不起作用。每一行都有不同的文件名。
发布于 2012-03-03 23:55:49
我会简单地这样做:
mysql_query("UPDATE table SET Filename = REPLACE(Filename, ' ', '_')");通过这种方式,您只需执行一条命令,并且根据表的大小,这应该会非常快
*编辑
发布于 2012-03-03 23:58:50
第一个答案是更好的:)
所以你的文件名在每一行都是一样的?否则,此代码将用一个名称替换所有文件名。您将需要一个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'");
}
}发布于 2012-03-03 23:55:09
如果您首先使用mysql_connect()连接到数据库,那么这将是可行的。
如果你只是一次性地这样做,你的解决方案是好的-但是如果你允许用户通过某种形式这样做,那么你就有一个称为SQL注入的安全缺陷。如果变量$filename是由用户提交的,那么他们可以结束查询并开始一个新的查询。永远不要将未清理的数据放入MySQL查询中。
要解决这个问题,可以将$filename放到mysql_real_escape_string中,或者更好地使用MySQLi或PDO提供的预准备语句。
https://stackoverflow.com/questions/9547407
复制相似问题