2009-10-04 69 views
0

正如您将看到的,我正在读取列,并尝试使用新数据更新列。 $result2行是我的问题,我不认为我可以在那里添加$row[0]。我该怎么做?热点更新mysql_fetch_array

$result = mysql_query("SELECT link FROM items LIMIT 3"); 

while($row = mysql_fetch_array($result)) 

    { 

    $url=($row[0]); 

$rez2 = get_final_url($url); 

$result2 = mysql_query("UPDATE items SET link = $rez2 WHERE id = $row[0] LIMIT 1") 

or die(mysql_error()); 

回答

4

你应该使用引号:

mysql_query("UPDATE items SET link = '{$res2}' WHERE id = $row[0]"); 

而且这将是理想的使用函数mysql_escape_string()函数。

所以:

$rez2 = mysql_escape_string(get_final_url($url)); 

你也正在尝试使用$行[0]为纽带和ID。很可能你希望$ row [0]元素是一个ID,并且像$ row [n],其中n> 0是一个链接。但是,如果你仍然想使用链接,您应该按以下方式查询:

$result2 = mysql_query("UPDATE items SET link = '$res2' WHERE link = {$row[0]}"); 

而且不要忘了逃跑$行

这是一个主意,用mysql_fetch_assoc()函数 - 中这种情况下你会得到一个关联数组,所以你可以通过sql列名访问元素。而作为结果,你可以这样做:

$result = mysql_query("SELECT id, link FROM items LIMIT 3"); 

while($row = mysql_fetch_assoc($result)) 

{ 

    $url=($row['link']); 

    $rez2 = mysql_escape_string(get_final_url($url)); 

    $result2 = mysql_query("UPDATE items SET link = '{$res2}' WHERE id = {$row['id']}") 

    or die(mysql_error()); 
} 

此外,如果ID是你不需要LIMIT 1更新查询主键。

+0

明白了'$ rez2'不像'{$ res2 }' 你是reeeaaalll ggooood ... Thx一堆 – Ossi 2009-10-04 07:02:37

2

$row[0]实际上在双引号字符串中是有效的。我认为你的问题是一个拼写错误:首先你为$rez2赋值,然后在你使用$res2的查询中。

+0

不错,赶上;)这是有益的,但我仍然得到Mysql语法错误: '://www.newurl.com/test'第1行 – Ossi 2009-10-04 06:34:15

1

get_final_url($url);是做什么用的?如果它没有用引号包围link,并处理正确的字符串转义(即mysql_real_escape_string),则您的查询将不起作用。