2009-05-15 11 views
1

誰かが私が00332という文字列をキャストすると、なぜ私は332だけ戻ってくるのか教えていただけますか?先行ゼロを削除し、データを同じ形式で保存します。キャスティングで先行ゼロが削除される

おかげ


this->_gate = (string) $this->_linkID->QuoteSmart($gate); 
+1

文字列を文字列にキャストしていますか?文字列へのint?詳しく教えてください。 –

+0

はい、文字列を文字列に変換します。私はタイプキャストに新しいです... –

+0

あなたの権利!変わったのは、変数以外のすべてを取り除いても、先行ゼロが削除されているということです。何が得られますか? –

答えて

1

整数にキャストしたときに先行ゼロが重要でないため、私は言っています。

は、あなたがそれらの先行ゼロが必要な場合は、たぶん、あなたはそれを文字列として残すべきであり、唯一の(あなたがあまりにも文字列を使用することができますが、PHPはそれを把握します)

実行するために必要なすべての数学上の(int)をキャスト編集

例を見た後、あなたは文字列にキャストする前に、私は値をエコーし​​たいと思います(私は怪しい何かを確認することができますがあなたとQuoteSmartメソッド(または値あなたがPARAMとして送ることが起こっていません、$ gate)

+0

ヘイアレックス。先日あなたは私を助けてくれてありがとう!私はサンプルの上に投稿しました。 –

+0

私が送るのは00432で、そのキャストの後、私はデータベースに432が保存されているだけです。 :/キャストする前に、私は00432をエコーすることができ、その後は432だけを取得します。私はquotesmart関数を削除し、それが修正されるかどうかを見てみましょう。 brb –

+0

また、ジム、DBのフィールドにはどのようなタイプがありますか?これはDBに保存されているものにも影響する可能性があります。 – alex

0

あなたは何をしにキャストするのか。コードを見てみましょう。 integerにキャストした場合、整数は先行ゼロがないので消えます。驚きはありません。

+0

上記をご覧ください。ヘルプありがとう –

2

文字列を文字列に変換しないでください。またはそのタイプの同じタイプの任意のタイプです。型キャスティングはあるタイプから別のタイプへの変更です。

+0

@ジム、それは本当に依存しています。ユーザー入力を受け入れる場合は、数値(例:$ _GET ['id'])でなければなりません。 $ _GET ['id']。どのような有益な数字にも到達できない場合、それは0になるでしょう。 – alex

+1

しかし、コンテキストに応じて他の予防措置を取る必要があります...例えば、ページに印刷される変数はhtmlspecialcharsでなければなりません()とデータベースのクエリのvarsはmysql_real_escape_stringまたはDBの同等のものでなければなりません。実際には、パラメータ化されたクエリを使用してください。 www.php.net/pdoを参照してください。 – alex

+0

それは意味があります。私はアレックスが出力を変更するquotesmart関数についてのポイントを持つかもしれないと思います。私はそれを取り除き、私が得たものを見るつもりです。 –

1
$ php -r 'var_dump((string)"00123");' 
string(5) "00123" 

キャストはあなたの問題ではないようです。

+0

ありがとうございます。それは私が他のところで問題を探していたものです。 :) –

0

OK、先行ゼロを削除した理由はここにあります。それは鋳造でもなく、addslashesでもありませんでした。私がしたことは変数を引用することでした(quotesmartは何とかしなければならないが何らかの理由でしなかった)。私が変数を引用すると、正しく保存された値が得られます。 Imを間違えないと、quotesmartはintではなく文字列でしか動かないでしょう。

関連する問題