2016-03-23 4 views

答えて

2

ここでは文字列を扱っており、クエリ内の変数は引用符で囲む必要があります。

サイドノート:アポストロフィの有無にかかわらず、クエリは引き続きエラーが発生しています。

  • さらに準備した準備済みの文例を参考にしてください。

も助けになることがあり、以下を参照してください:

だから変更

SET name=" . $temp) 

SET name= '$temp'") 

ここで使用する方が良いでしょう。

とを接続するために使用するMySQLのAPIに逃げる機能の相対を使用してデータをエスケープ:以下

参考文献を参照してください。

ただし、WHERE句がなく、テーブル全体が更新されます。

ので、例えば:

SET name= '$temp' WHERE column_to_update = 'x' ") 

xはあなたが記入し合うように列名を変更するために必要なものです。 UPDATE上

リファレンス:マニュアル(PDO/INSERT)から

例:あなたのケースでそう

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); 
$stmt->bindParam(':name', $name); 
$stmt->bindParam(':value', $value); 

// insert one row 
$name = 'one'; 
$value = 1; 
$stmt->execute(); 

try { 
    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sql = " 

    UPDATE chasiv_lg_cbbfl.defaults 
     SET `name` = :temp 

    WHERE `column_to_update` = :xxx 

    "; 

    $query = $conn->prepare($sql); 
    $query->bindValue(":temp", $temp); 
    $query->bindValue(":xxx", $xxx); 
    $query = $statement->execute(); 

    $conn = null; // Disconnect 
} 

catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
+0

すべての情報をありがとう。テーブルはデフォルトテーブルであるため、レコードが1つしかないため、whereステートメントが存在しなかったためです。文章を準備することはaddslashesなどの必要性を取り除いたことは私の理解であった。答えは、$ tempを$ conn-> quote($ temp)に変更し、 'duplicate'リンクに記載されているようにすることでした。私は彼らがあなたが直接ステートメントで同じことを成し遂げることができるように、物事を縛ることを望んでいる理由は不明です。一度に2つ以上のレコードを追加している場合はバインドの使用を見ることができますが、再び簡単にループを使用することができます。 –

+0

@CharlesWilkinsIVよろしくお願いします。私はあなたの解決策を得てうれしく思います*歓声* - P .:いくつかの理由で私の回答を削除するかもしれません。だからあなたがそれを見たら、あなたもあなたの質問を削除することができます。いくつかの人が私たちに下降し、私の答えと同じように問題は正当だった。 –

関連する問題