php - [PHP/MySQL] : Prepared Statement in a loop

标签 php mysql loops mysqli prepared-statement

我的问题对我来说似乎很小,但是我找不到合适的解决方案。 设置:我有一个表“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/

相关文章:

使用 MySQL 显示表状态的 php 日期格式

php - Joomla 3.x 中的 MySQL 查询慢得离谱

mysql - 拉维尔 5 : How to dump SQL query?

java - Elasticsearch-6.6.0 无法在 Windows 上启动

php - 如何验证数据库中的答案并显示正确答案?

javascript - 带有 AngularJS 的 PHPMailer

innodb - Cpanel sql 备份失败

r - 如何在循环中使用 mutate 和 ifelse?

java - 循环播放一个网页

java - Struts2 使用动态变量通过列表进行嵌套迭代