2012-01-27 86 views
3

當我嘗試更新我的表格而不是通過url數組遞增時,打印到表格的內容只是url數組中的最後一項。使用foreach更新MySQL表格()

當我回應$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++; 
} 

回答

5

您比較字符串:WHERE id='currentId'

應該是一個變量WHERE id='$currentId'

2

currentId作爲一個字符串,而不是一個變量。

此外,你應該確保你逃避那些值與mysql_real_escape_string()

+2

這是不是真的對用戶的輸入,它是關於如何確保MySQL的東西認爲是一個特殊字符將被正確處理。這是一個很好的習慣。 – 2012-01-27 13:51:54

+0

@Topener:由於系統需要由某人編程,所以仍然是「用戶」輸入(特別是如果你使用初級編碼器)。儘管如此,a)使用正確的類型(例如'(int)$ currentId')或者b)參數化查詢可能更好,而不是盲目地將所有東西都轉換爲字符串。 – Piskvor 2012-01-27 14:05:40

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_ref來逃避$ url al_escape_string。

編輯:正如@Topener指出的,我錯過了currentId之前的一個$編輯來解決這個問題。

+0

仍然不對,這會引發錯誤。看到我的回答 – 2012-01-27 13:48:06

+0

@Topener其實,手冊中指出: 「在向MySQL發送查詢之前,必須始終(除少數例外)使用此功能以確保數據安全。」,甚至您自己創建的字符串都可以包含「'」字符。 – 2012-01-27 13:53:31

+0

@Topener:這不會引發錯誤。如果你指的是他遺漏了單引號的事實,它可能是故意完成的,因爲在任何給定的模式中,名爲id的列是10的9倍,並且這是支持的在OP的這一行:'$ currentId = 1'。 – FtDRbwLXw6 2012-01-27 13:54:05

0

有在這一行錯誤:

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

我會改變這樣的:

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

確保你正確轉義的變量在查詢中使用(貌似intval()id/$currentId如果這是來自用戶輸入或任何外部來源,並mysql_real_escape_string()url,如@路易斯說)。然後將它們插入到查詢中,如果它確實是一個整數,則不要引用$currentId

$currentId = 1; 

foreach($pages as $url) { 

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

    mysql_query($query); 

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

    $currentId++; 

} 
// foreach 
-1

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

此查詢不可用!如果你更新了很多行,它會佔用大量的資源!

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

+0

只有21行,因爲我想弄清楚爲什麼echo會打印正確的東西(因此我知道變量每次都通過循環獲取正確的值),但mysql表只打印url的最後一個值21次。 – user1155445 2012-01-27 15:45:11