SQL多个更新语句

时间:2011-08-14 13:17:26

标签: php sql

我需要更新数据库中的40行,从userID匹配的位置开始。我不想确定行号,因为最终这个数据库将是巨大的。

我想做的只是说:

  

“使用我的数组更新这些接下来的40行,其中userID = myUserID”

这就是我所拥有的:

<?php
// connect to the database and select the correct database
$con2 = mysql_connect("localhost","Database","Password");
if (!$con2)
{
   die('Could not connect: ' . mysql_error());
}

mysql_select_db("ifaves_code", $con2);

$i = 0;
while ($i < 40) {

//cycle through the array
$cycleThrough2 = $updatedUserNames[$i];

//$query = "UPDATE tblUserLinks SET `URLName` = '$cycleThrough2' WHERE userID = '" . $mainUID . "' LIMIT 1";

mysql_query($query) or die ("Error in query: $query");
++$i;

}
mysql_close();
?>

变量$mainUID设置正确,我遇到的问题是数据库中没有发生更新。

如何更改现有代码以接收我想要的行为?

1 个答案:

答案 0 :(得分:3)

我不认为这是因为你的查询构建语句被注释掉了......

//$query = "UPDATE tblUserLinks SET `URLName` = '$cycleThrough2' WHERE userID = '" . $mainUID . "' LIMIT 1";

如果这只是调试的结果而在此之前无法正常工作,则必须在mysql_error()之后立即调用mysql_query()以查看失败的原因。

$result = mysql_query($query);
if (!$result) echo mysql_error();

此外,您最后使用LIMIT 1,但userID在WHERE子句中永远不会更改。因此,您在每个循环上重复更新同一行40次。您需要的是WHERE子句中的一种方法,用于标识已经修改过的行,并将其排除。否则,LIMIT 1将始终捕获同一行(第一个匹配)并更新。