使用foreach()更新MySQL表

时间:2012-01-27 13:43:19

标签: php mysql foreach

当我尝试更新我的表而不是递增url数组时,打印到表中的内容只是url数组中的最后一个条目。

当我回显$url时,我可以告诉它正确地循环通过数组。当我回显$currentId时,增量正确。为什么查询不输入表格中的每一行$url。这里发生了什么,我不明白?

$currentId = 1;
foreach($pages as $url)
{
    $query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";
    mysql_query($query);
    echo($url.'<br/>');
    $currentId++;
}

6 个答案:

答案 0 :(得分:10)

而不是

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";

...查找与字符串“currentId”匹配的ID,尝试...

$query = "UPDATE pageurls SET url='".mysql_real_escape_string($url).
         "' WHERE id=".$currentId;

由于你自己生成currentId,它是安全的,但是你应该使用mysql_real_escape_string来逃避$ url。

编辑:正如@Topener指出的那样,我在currentId之前错过了一个$,编辑修复它。

答案 1 :(得分:5)

您正在比较字符串:WHERE id='currentId'

应该是变量WHERE id='$currentId'

答案 2 :(得分:2)

currentId用作字符串,而不是变量。

此外,您应确保使用mysql_real_escape_string()

转义这些值

答案 3 :(得分:0)

此行中有错误:

$query = "UPDATE pageurls SET url='$url' WHERE id='currentId'";

我会改变它:

$query = "UPDATE pageurls SET url='".$url."' WHERE id=".$currentId;

答案 4 :(得分:0)

确保您正确转义查询中使用的变量(intval() / id的{​​{1}},如果它来自用户输入或任何外部来源,并且{ {1}} {1}},正如@Louis所说。然后将它们插入到查询中,如果它确实是一个整数,则不引用$currentId

mysql_real_escape_string()

答案 5 :(得分:-1)

您正在使用字符串而不是变量!

这个查询很糟糕!如果你更新很多行,它将为你带来很多资源!

看看:“Update Multiple Rows With Different Values and a Single SQL Query