繁体   English   中英

使用foreach()更新MySQL表

[英]Update MySQL table with 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++;
}

代替

$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之前错过了$,编辑修复它。

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

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

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

此外,您应该确保使用mysql_real_escape_string()转义这些值

这一行有一个错误:

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

我会改变它:

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

确保你正确地转义查询中使用的变量(如果来自用户输入或任何外部源,则看起来像id / $currentId intval() ,对于url ,看起来像mysql_real_escape_string() ,如@Louis所说。 然后将它们插入到查询中,如果它确实是一个整数,则不引用$currentId

$currentId = 1;

foreach( $pages as $url ) {

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

    mysql_query( $query );

    echo( $url . '<br/>' );

    $currentId++;

}
// foreach

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

这个查询非常好! 如果你更新很多行,它将为你带来大量的资源!

看一下:“ 使用不同的值和单个SQL查询更新多行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM