2014-02-05 61 views
0

我的問題對我來說似乎是一個相當小的問題,但是我找不到一個合適的解決方案。 設置:我有一個表'city_locations'與列'國家','城市','經度','緯度'。該國由2個字母的ISO代碼給出。我希望他們成爲全名。[PHP/MySQL]:在一個循環中編寫語句

爲此,我導入了表'countrycodes',其中只包含'name'和'code'列。

$namechange = $con->prepare("UPDATE city_locations SET country=? WHERE country=?"); 

$list = $con->prepare("SELECT name, code FROM countrycodes"); 
$list->execute(); 
$list->bind_result($name, $code); 

$namechange->bind_param('ss', $name, $code); 

while ($list->fetch()){ 
    while ($namechange->execute()) {} 
    echo "$code is now $name <br>"; 
} 

我成功檢索(外)while循環中的所有對。

$ namechange-> execute();但是沒有做任何事情 - 我嘗試了使用和不使用while循環,試圖在查詢中使用LIMIT 0,10000(儘管我不完全確定我理解LIMIT是正確的)。在沒有while循環的情況下,語句不會執行任何操作。在限制爲0,10000的情況下,語句不能正確填寫(給出錯誤)。

我也試圖在while循環的每一步中綁定新的參數 - 似乎也沒有做任何事情。

從我的Web界面運行相同的命令時,它工作正常。但是,在這種情況下,我必須手動輸入所有200多個代碼。似乎有點多的工作。

非常感謝您的幫助, Kjeld。

編輯:$ con是mysqli類型。

+0

這是mysqli。那麼,它會給我表中的第一個10.000還是第一個10.000我的查詢? –

+0

它將從索引0 - > 10.000返回 – Pogrindis

+0

您是否在使用PDO? –

回答

0
$namechange = $con->prepare("UPDATE city_locations SET country=? WHERE country=?"); 
$list = $con->prepare("SELECT name, code FROM countrycodes"); 
$list->execute(); 
$list->bind_result($name, $code); 



while ($list->fetch()){ 
    $namechange->bind_param('ss', $name, $code); 
    $namechange->execute(); 

    echo "$code is now $name <br>"; 
} 

它可能會解決您的問題。

+0

所以我們結束了一個問題,甚至沒有試圖提供[錯誤消息](http://php.net/manual/en/mysqli.error-list.php),一個未註釋的代碼轉儲爲答案以及帶有「無效」評論的接受答案標誌。這對於未來在這裏瀏覽的人是非常有用的。 –

+0

即使使用error_reporting(E_ALL),也沒有錯誤消息; (除了失敗的準備聲明,這是因爲不正確的查詢)。由於幾乎所有人都認爲這是正確的解決方案,我認爲這是正確的方式,通常適用於其他人(如上所述,我已經決定我甚至不想解決我的問題了)。 如果您認爲它會更符合SO的一般準則來刪除正確的答案,我會這樣做。 –

+0

更新:在處理相關問題時,當我導入.csv時,我意識到所有'代碼'條目都保留了換行符。再次快速導入表格,我只是出於好奇而嘗試了這個解決方案,它工作。 –