假设我有这个循环:
foreach ($array as $a) {
if ($a == $b) {
mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
}
}
还有一张桌子。。。
id this blah
------------------------
1 that 54
2 that 73
3 there 27
在该循环中,我还想从正在更新的当前记录中查找存储在表blah
字段中的值。
做这件事最有效的方法是什么?
您可以让查询由多个语句组成,最后一个语句用于"结果"。
因此,您可以在更新查询的末尾添加一个"select"语句,并将其视为普通的select语句:
UPDATE table SET this = 'that' WHERE id='$a'; SELECT blah from [your table] WHERE id = '$a'
这种方法的优点是不需要额外的DB调用。
当然,您会希望转义放入SQL语句中的值,以防止SQL注入,但这是另一回事。
更新
这是我的第一个的第二个SO答案,我觉得需要修改。环顾四周,我找到了一个更好的答案来回答你的问题。
根据已接受的问题答案:SQL:用1查询更新行并返回列值
您想要OUTPUT子句
UPDATE Items SET Clicks = Clicks + 1 OUTPUT INSERTED.Name WHERE Id = @Id
类似的问题:有没有办法同时选择和更新行?
旧答案
将SELECT
语句添加到UPDATE
查询的末尾。
mysql_query("UPDATE table SET this='this'WHERE id='$a';SELECT blah WHERE id='$sa';");
由于mysql_query
只返回最后一条语句的结果,因此无法确保进行了更新。
您也可以编写一个自定义函数来执行这两个语句,但例如,如果UPDATE
失败,则不会预生成SELECT
,等等。
**骨架功能-未测试**
function MyUpdate($query, $id){
$retVal = "-1" // some default value
$uResult = mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
if( $uResult )
$result= mysql_query('SELECT blah WHERE id=$a');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
$retVal = $result;
}
return $retVal;
}