我的问题对我来说似乎很小,但是我找不到合适的解决方案。 设置:我有一个表“city_locations”,其中包含“国家/地区”、“城市”、“经度”、“纬度”列。国家/地区由 2 个字母的 ISO 代码给出。我希望他们是全名。
为此,我导入了“国家/地区代码”表,其中仅包含“名称”和“代码”列。
$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 循环,该语句都不会执行任何操作。使用 LIMIT 0, 10000 无法正确准备语句(给出错误)。
我还尝试在 while 循环的每一步中绑定(bind)新的参数 - 似乎也没有做任何事情。
当从我的网络界面运行相同的命令时,它工作正常。然而,在这种情况下,我必须手动输入所有 200 多个代码。看起来工作量有点大。
非常感谢您的帮助, 凯杰尔德。
编辑:$con 是 mysqli 类型。
最佳答案
$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>";
}
它可能会解决您的问题。
关于php - [PHP/MySQL] : Prepared Statement in a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574664/