0

これを使用して、ストア内の各製品に固有のコードを作成します。

echo base_convert(uniqid(),16,10);

例えば、

1403802682572650

私のクエリは次のように単純です。

        $sql = "
            SELECT * 
            FROM page AS p

            LEFT JOIN stock AS o
            ON o.id = p.page_id

            WHERE p.type = ?
            AND p.hide != ?
            ORDER BY p.backdated_on
        ";

そして、製品コードを取得したいときは、これを行います。

var_dump($product->code);

しかし、PHPはfloat(1.4038026825726E+15) 代わりに戻ります1403802682572650

floatPHP が代わりに を返すのはなぜstringですか? 番号をそのまま取得するにはどうすればよいですか?

または、db テーブルから結果を要求する前に、SQL クエリで数値を文字列または varchar に変換/キャストする必要がありますか?

編集: 私のコードにバグが見つかりました。

たとえば、jsonを配列に変換し、文字列をfloatに変換する行があります。

echo json_decode("1403802682572650", true); // 1.4038026825726E+15
4

3 に答える 3

1

データベーススキーマに有害な変更を加えることなく、2つのことのいずれかを実行できます。

最初にcast$product->codeと入力できます。

var_dump( (string) $product->code );

または、クエリで選択をキャスト/変換できます。

SELECT CAST(columnName as char) as code ...

データベースエンジンがクエリをサポートしていない場合、私は常にクエリではなくコードを介してこのようなほとんどの変更を処理するのが好きです。

于 2012-06-04T01:14:45.987 に答える
1

いいえ。実際VARCHARには数値として使用されていないため、列自体をに変更する必要があります。

于 2012-06-04T01:02:50.587 に答える
1

値が範囲外です。

PHP男:

整数のサイズはプラットフォームに依存しますが、最大値は約 20 億が通常の値です (符号付き 32 ビット)。通常、64 ビット プラットフォームの最大値は約 9E18 です。PHP は符号なし整数をサポートしていません。PHP 4.4.0 および PHP 5.0.5 以降、整数サイズは定数 PHP_INT_SIZE を使用して決定でき、最大値は定数 PHP_INT_MAX を使用して決定できます。

PHP が整数型の境界を超える数値を検出すると、代わりに float として解釈されます。また、整数型の境界を超える数値になる演算は、代わりに float を返します。

于 2012-06-04T01:19:43.777 に答える