Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[PHP/MySQL]:在循环中准备好的语句_Php_Mysql_Loops_Mysqli_Prepared Statement - Fatal编程技术网

[PHP/MySQL]:在循环中准备好的语句

[PHP/MySQL]:在循环中准备好的语句,php,mysql,loops,mysqli,prepared-statement,Php,Mysql,Loops,Mysqli,Prepared Statement,我的问题对我来说似乎很小,但我无法找到一个合适的解决办法。 设置:我有一个“city_locations”表,其中有“country”、“city”、“longitude”、“latitude”列。国家由两个字母的ISO代码表示。我希望他们是全名 为此,我导入了表'countrycodes',其中只包含'name'和'code'列 $namechange = $con->prepare("UPDATE city_locations SET country=? WHERE country=?

我的问题对我来说似乎很小,但我无法找到一个合适的解决办法。 设置:我有一个“city_locations”表,其中有“country”、“city”、“longitude”、“latitude”列。国家由两个字母的ISO代码表示。我希望他们是全名

为此,我导入了表'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>";
}
$namechange=$con->prepare(“更新城市位置设置国家=?所在国家=?”);
$list=$con->prepare(“从countrycodes中选择名称、代码”);
$list->execute();
$list->bind_结果($name,$code);
$namechange->bind_参数('ss',$name,$code);
而($list->fetch()){
而($namechange->execute()){}
echo“$code现在是$name
”; }
我成功地检索(外部)while循环中的所有对

$namechange->execute();然而,我什么也没做——我试过使用while循环,也试过不使用while循环,试过在查询中使用LIMIT 0,10000(尽管我不完全确定我是否正确理解LIMIT)。无论是否使用while循环,该语句都不会执行任何操作。如果限制为0,10000,则语句不能正确地预先定义(给出一个错误)

我还尝试在while循环的每个步骤中绑定params new,但似乎也没有做任何事情

当从我的web界面运行相同的命令时,它工作正常。但是,在这种情况下,我必须手动键入所有200多个代码。看起来工作有点多

非常感谢你的帮助, 杰尔德

编辑:$con属于mysqli类型。

$namechange=$con->prepare(“更新城市位置集国家=?其中国家=?”;
$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>";
}
$list=$con->prepare(“从countrycodes中选择名称、代码”); $list->execute(); $list->bind_结果($name,$code); 而($list->fetch()){ $namechange->bind_参数('ss',$name,$code); $namechange->execute(); echo“$code现在是$name
”; }
它可能会解决您的问题。

这是mysqli。那么,它会给我表的前10.000还是适合我查询的前10.000?它将从索引0->10返回。000@JeroenBollenMySQLIOO风格切题的问题:改为PDO是更明智还是更注重品味?我还在项目的早期阶段(不到1000行代码),并且肯定愿意更改。绑定参数不应该在第一个while循环中吗?因此,我们最终提出了一个甚至没有尝试提供的问题,一个未注释的代码转储作为答案,以及一个带有“不工作”注释的接受答案标志。这将是非常有帮助的谁在未来浏览这里。没有错误消息,即使有错误报告(E_所有);(除了失败的prepared语句外,这是由于不正确的查询)。因为几乎每个人都认为这是正确的解决方案,所以我认为这是正确的方法,通常对其他人有效(如上所述,我已经决定我甚至不想再解决我的问题)。如果您认为删除正确答案更符合SO的一般准则,我会这样做。更新:在处理相关问题时,我意识到在导入.csv时,所有“代码”条目都保留了换行符。再次快速导入表,出于好奇,我尝试了这个解决方案,它奏效了。@KjeldSchmidt mysqli扩展有(IMHO,一个荒谬的数量)函数来获取错误消息,他们不会称自己。我的评论中的蓝色单词是指向其中一个的链接。如果您最终发现了问题所在,以及这段代码将如何解决问题,那么最有用的方法就是编辑答案并添加一些解释。如果你没有足够的代表,发表评论也很好。