Table
*------------------------------------------------*
| id | title | filename |
*------------------------------------------------*
让我们说这是表格的结构。我想更新此表的每一行。
假设我想用下划线替换Filename中的每个空格。
$new_filename = str_replace(" ", "_", $filename);
mysql_query("UPDATE table SET Filename = '$new_filename'");
这不起作用。每行都有不同的文件名。
答案 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提供的预处理语句。