2017-01-06 12 views
1

私の人生の間、私はこのページへの投稿がうまくいかない理由を理解できません。私はStackoverflowとインターネット全体から見つけたものを試しています。htmlフォームに基づいたPHPの挿入配列

最初の部分は "id"セクションで機能しますが、更新機能は機能しません。

PHP message: PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters'

updatecompany.php(21):神父\ LS :: updateCompany(アレイ、NULL)

これらのエラー・ログからです。どんな助力も深く感謝します。問題の

if (isset($_POST["id"]) && is_numeric($_POST["id"])) { 
    $id = $_POST["id"]; 
    $vid = \Fr\LS::getCompany("id", $id); 
    $vname = \Fr\LS::getCompany("name", $id); 
    $vlogo = \Fr\LS::getCompany("logo", $id); 
    $vinfo = \Fr\LS::getCompany("info", $id); 
    $vsite = \Fr\LS::getCompany("site", $id); 
    $vest = \Fr\LS::getCompany("est", $id); 
} elseif (isset($_POST["update"])) { 
    \Fr\LS::updateCompany(array(
     "name" => $_POST["name"], 
     "logo" => $_POST["logo"], 
     "info" => $_POST["info"], 
     "site" => $_POST["site"], 
     "est" => $_POST["est"] 
    ), 
    $_POST["id"]); 
    echo "<center>Company updated!"; 
    echo "<br><a href='updatecompany.php" . $_POST["id"] ."'>go back</a></center>"; 
} else { 
    die("No server with that id."); 
} 

public static function updateCompany($toUpdate = array(), $company = null) { 
    self::construct(); 
    if(is_array($toUpdate) && !isset($toUpdate['id'])) { 
     if($company == null) { 
      echo "No company ID set!"; 
     } 
     $columns = ""; 
     foreach($toUpdate as $k => $v) { 
      $columns .= "`$k` = :$k, "; 
     } 
     $columns = substr($columns, 0, -2); // Remove last "," 

     $sql = self::$dbh->prepare("SELECT {$columns} FROM companys WHERE `id` = ? ORDER BY `id` LIMIT 1"); 
     $sql->bindValue(":id", $company); 
     foreach($toUpdate as $key => $value) { 
      $value = htmlspecialchars($value); 
      $sql->bindValue(":$key", $value); 
     } 
     $sql->execute(); 
    } else { 
     return false; 
    } 
} 
+1

変更それは列定義で何が起こっていますか?また、 'substr'を使って' rtrim'を使います。 – chris85

+0

..どこにいても更新しないでください! – Jeff

答えて

3

一部は次のとおりです。

この

"SELECT {$columns} FROM companys WHERE `id` = ? ORDER BY `id` LIMIT 1" 

には更新文ではありません。

"UPDATE companys SET {$columns} WHERE `id` = :id" 
関連する問題