2016-11-18 159 views
2


我的问题是,只要我有与GuildName在哪里它不起作用。它根本不会更新任何东西。
只要我有id = 1(有100个公会,所以设置id = 1不是一个选项),它确实有效。(PDO)UPDATE不更新与WHERE变量

$form   = $_POST; 
$boss   = $form['bossname']; 
$gname   = $form['guildname']; 
$screen   = $form['screenshot']; 
$log   = $form['logs']; 
$defeat   = $form['defeat']; 

if(isset($_POST['edit-guild'])){ 

    $Statement = $conn->prepare("UPDATE $boss SET `Bossname` =:boss, `GuildName` =:gname, `Screenshot` =:screen, `Link` =:link, `KillTime` =:defeattime, `KillYN` =:kill WHERE `GuildName`=:gname"); 
    // EXECUTING ARRAY FOR ^GUILD INFORMATION 
    $Statement->execute(array(
     "boss"   => $boss, 
     "gname"   => $gname, 
     "screen"  => $screen, 
     "link"   => $log, 
     "defeattime" => $defeat, 
     "kill"   => 'Yes' 
     )); 
} 

只要我有WHERE id = 1它确实工作。

$Statement = $conn->prepare("UPDATE $boss SET `Bossname` =:boss, `GuildName` =:gname, `Screenshot` =:screen, `Link` =:link, `KillTime` =:defeattime, `KillYN` =:kill WHERE id=1"); 
+1

另一场不能重复使用相同的参数名称非常重要的。 –

+0

为什么用相同的值更新'gname'? –

+1

这是正确的'更新$老板SET' $老板作为参数和tabelname? – JustOnUnderMillions

回答

1

如上所述,你不能重用相同的参数。尝试给它一个不同的名称:

if(isset($_POST['edit-guild'])){ 

    $Statement = $conn->prepare("UPDATE $boss SET `Bossname` =:boss, `GuildName` =:gname, `Screenshot` =:screen, `Link` =:link, `KillTime` =:defeattime, `KillYN` =:kill WHERE `GuildName`=:gname2"); 
    // EXECUTING ARRAY FOR ^GUILD INFORMATION 
    $Statement->execute(array(
     "boss"   => $boss, 
     "gname"   => $gname, 
     "gname2"   => $gname, 
     "screen"  => $screen, 
     "link"   => $log, 
     "defeattime" => $defeat, 
     "kill"   => 'Yes' 
     )); 
} 
+0

所以简单地用不同的名字应该在这里做这件事? – pbahmann1

+0

忽略任何其他错误,是的它应该工作。奇怪你的表名是以'$'为前缀的。那是故意的吗? – atoms

+0

好吧,工作就像一个魅力,谢谢你!会有更好的解决方案吗?你似乎怀疑 – pbahmann1

0

从更新集中删除gname字段。

$Statement = $conn->prepare("UPDATE $boss SET `Bossname` =:boss, `Screenshot` =:screen, `Link` =:link, `KillTime` =:defeattime, `KillYN` =:kill WHERE `GuildName`=:gname"); 

,如果你认为gname处于更新SET,你可以尝试其他不同的名称或试图改变where条件像id