2014-02-05 4 views
0

Моя проблема кажется довольно маленькой для меня, но я не могу найти правильное решение. Установки: У меня есть таблица «city_locations» со столбцами «страна», «город», «долгота», «широта». Страны выдаются 2-буквенными ISO-кодами. Я хочу, чтобы они были полными именами.[PHP/MySQL]: Подготовленный отчет в цикле

Для этого я импортировал таблицы «countrycodes» таблицы, содержащие только имена столбцов и «код».

$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>"; 
} 

Я успешно извлекаю все пары во внешнем цикле.

$ namechange-> execute(); однако ничего не делает - я пробовал его с циклом while и без него, пытался использовать LIMIT 0, 10000 в запросе (хотя я не совсем уверен, что правильно понимаю LIMIT). С циклом while и без него утверждение ничего не делает. С LIMIT 0, 10000 оператор не может быть предварительно препринтирован (дает ошибку).

Я также попытался связать params new на каждом шаге цикла while - тоже ничего не делал.

При выполнении той же самой команды из моего веб-интерфейса она работает нормально. Однако в этом случае я должен ввести все 200+ кодов вручную. Кажется, что много работы.

Большое спасибо за вашу помощь, Kjeld.

EDIT: $ 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

Обновление: при работе над связанной проблемой я понял, что все записи «code» сохранили строку, когда я импортировал CSV. Быстро импортируя таблицы снова, я пробовал это решение только из любопытства, и это сработало. –

Смежные вопросы