2017-02-07 9 views
0

私はデータベースでうんざりしていたので、自己教えのスターターとして、少し問題があります。 以下は動作していないコードの部分です。これはサーバへの接続が成功していることを上回っています。 ここからは更新に失敗しています。理由はわかりません。 私のシステムでは、PDOで実行する必要があると思えば、動作中のPDO接続文字列があります。 この時点で私は空中に穴を開ける。 あなたの時間を感謝します。 MySQLの構文はinsert構文ではなく、更新されていることをがSQLの問題を抱えている

$stmt = $conn->prepare("UPDATE bfl SET gamerid="?", name="?", age="?",location"?", email="?", console="?"WHERE team="?" "); 



$stmt->bindParam(1, $gamerid); 
    $stmt->bindParam(2, $name); 
    $stmt->bindParam(3, $age); 
    $stmt->bindParam(4, $location); 
    $stmt->bindParam(5, $email); 
    $stmt->bindParam(6, $cosole); 
    $stmt->bindParam(7, $team); 

$stmt->execute(array($gamerid,$name,$age,$location,$email,$co‌​nsole,$team); 
+2

これは 'update'構文ではなく' insert'構文です。 'mysql_ *'も 'pdo'と混在しないで' pdo'を使ってクエリをパラメータ化するべきです。更新構文についてはhttps://dev.mysql.com/doc/refman/5.7/en/update.htmlを参照してください。さらに、一重引用符で囲まれた変数は変数ではありません。ここでは多くの問題があります。 – chris85

+0

SET gamerid = "$ gamerid"、name = "$ name"などのようになります。 私のpdo能力は事実上存在しません –

+0

あなたの ' mysql_ * 'はそれほど遠くないように見えるので、船が沈む前に船を修正するかもしれない。 http://php.net/manual/en/pdo.prepared-statements.phpすべての値に '?'を使用し、バインディング関数または配列としての実行で値を渡します。例えば'$ std-> execute(array($ gamerid、$ name、$ age、$ location、$ email、$ console、$ team))'を実行し、 '$ pdo-> prepare 'のような準備をします(' update bfl SET gamerid =? WHERE team =? ') ' – chris85

答えて

1
  1. PDOmysql_*を使用してください。
  2. 連結されていないパラメータ化クエリを使用します。
  3. プレースホルダは引用されません。
  4. 実行時にバインドまたはバインドします。両方を実行しないでください。
  5. 内部クエリ全体に括弧を入れないでください。あなたが得る一緒に入れ

$stmt = $dbh->prepare('UPDATE bfl 
         SET gamerid=?, 
         name=?, 
         age=?, 
         location?, 
         email=?, 
         console=? 
         WHERE team=?'); 
$stmt->execute(array($gamerid,$name,$age,$location,$email,$co‌​nsole, $team)); 

はまた、エラー報告、http://php.net/manual/en/pdo.error-handling.phpを使用して見て、これは将来的にあなたを助けるでしょう。

+0

ああ、私がそれぞれを束縛すれば、私はただ実行しなければならないだろう。 –

+0

これは正しいです。あなたのアプローチは二重バインディングでした。 – chris85

関連する問題