2012-02-29 12 views
0

を更新できません。私は、私は、MySQLのすべての特異性を理解していないためであると確信している奇妙な問題:(のMySQL:既存のNULL値に

を持っている私が持っている列を持つテーブルを持っています既定値のNULL、 "TeamID"。その列の値を指定せずに新しい行を追加すると、NULLになります。その行を更新する場合を除いて、次のコードは値を変更していないようですNULL(あるいは任意のエラーを引き起こす):

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
    $STH->execute($params); 

問題を修正再表示するには:私は、null非許容値とTeamIDを上書きする問題を抱えていますすでにそれがあればNULL。コード自体にどこにエラーがあるのか​​わからないので、それはNULLの値と関係があると想像しています。

PHP/MySQLでコーディングする1つの問題は、PHPMyAdminがステップアップするため、コードをステップ実行してデータベースの内容を同時に見ることができないことです。

ありがとうございました!

+0

? –

+0

@BD。うん、それはまさに正しい。 –

+0

そして私はuserIDがnullではないと仮定しますか? –

答えて

2

問題の一部は、パラメータの前後に引用符を使用している場合があります。 paramsでPDOのprepared statementを使用しているので、文字列を引用する必要はありません。私はPDOがnullをどのように表しているのかよくわかりませんが、SET TeamID = ''またはSET TeamID = 'null'を設定しようとすると、列のタイプによっては無効になることがあります。

+0

引用符が削除されました。ありがとう! –

1

周りPDOとパラメータという名前の引用符を入れないでください:

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
$STH->execute($params); 

UserIDは、文字列':userID'を等しくすることはありませんので、何も更新されませんされます。

、あなたのパラメータが解釈されていることを確認、引用符を削除し、このようにするには:だからTeamIDがNULLで更新されていない

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = :teamID WHERE UserID = :userID"); 
$STH->execute($params); 
+0

きちんと説明されています。ありがとう! –

+0

MySql(デフォルト設定では?)は1と1を比較するので、UserID = '12345'は適切なレコードを返します。同じことが設定のために行きます。 colの型がintであっても、UPDATE ... SET col = '1'を実行できます。しかし、 'UPDATE ... SET col = '''と同じ列にエラーが発生します。 – Farray

関連する問題