3

私はMYSQLで非常に厄介であることが証明されている癖に遭遇しました。

SQLステートメントを使用して既存のレコードを更新しています。郵便番号を取得する場合を除いて、すべての更新は正常に機能します。zipの値が空の場合は、0が挿入されます。フィールドに値がある場合は、問題なく正しい値が挿入されます。

zipフィールドのデータ型はint(11)です。

クエリのSQLステートメントは次のとおりです。

$sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode='$zipcode', emailadr='$emailadr' WHERE memberid= '$memberid'";

郵便番号が空の場合、更新する前にそれをエコーアウトすると、次のように表示されます。zipcode = '',

0は、何かに応答してMYSQLによって挿入されます。

zip値の周りのアポストロフィを削除しようとしましたが、MYSQLがエラーをスローしたため、修正されません。

誰かがこれに遭遇しましたか、またはあなたは解決策を提案できますか?

提案をありがとう。

4

3 に答える 3

7
$sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode=" . (!$zipcode ? 'NULL' : (int)$zipcode) . ", emailadr='$emailadr' WHERE memberid= '$memberid'";

この場合、-空の場合$zipcode(空の文字列または0)-NULLが挿入され、それ以外の場合は実際の値が挿入されます

PS:zipcodeフィールドがNULL可能であることを確認してください

PPS:0mysqlが空の文字列を整数にキャストし、それが0であるため、次のようになります。

于 2012-07-18T21:40:36.677 に答える
1

はい、INTフィールドに挿入されると、空の文字列は0として扱われます。本当にINTを使用していて、デフォルトのフィールド値を挿入する(または、フィールド設定で許可されている場合はNULL値を挿入する)場合は、郵便番号の値を一重引用符で囲むのではなく、クエリロジックをzipcode = NULLの挿入値に変更するか、挿入からファイルされた値を完全に除外する必要があります。

于 2012-07-18T21:42:09.890 に答える