Question

I have started using Redbean PHP recently. So I am not much aware of how it deals things. Until now I love how simple it is making things for me. But I have ran into quite an issue today. I need to store credit card numbers into a table. But as soon as I store the bean, the card number gets changed into a float(decimal) kind of value.

'1234123412341234' is getting stored as '1.234123412341234e15'

The datatype is 'double' created by redbean, but I gave as a string. This is kind of weird for me I am not much of an expert in either SQL or PHP. Is there a way to override how redbean creates table. So someone please help me. Am I missing something here. The following is my corresponding code and the framework used is Codeigniter.

Data Variable

$data = array(
    'card_name' => 'Shiva Kumar Avula',
    'card_no' => '1234123412341234',
    'card_issuer' => 'Visa',
    'card_cvv' => '123',
    'card_exp_month' => 12,
    'card_exp_year' => 2020
);

$card = $this->card_model->create_card($data, TRUE); // Making it primary

Model Function

public function create_card($data, $is_primary = FALSE)
{
    $card = R::dispense('card');

    $card->name = $data['card_name'];
    $card->number = $data['card_no'];
    $card->issuer = $data['card_issuer'];
    $card->cvv = $data['card_cvv'];
    $card->exp_month = $data['card_exp_month'];
    $card->exp_year = $data['card_exp_year'];
    $card->is_primary = $is_primary;
    $card->is_verified = 0;
    $card->ts_created = $this->ts_sql;
    $card->ts_modified = $this->ts_sql;

    $id = R::store($card);
}

Snapshot of my output in phpmyadmin, enter image description here

Snapshot that shows the datatype, enter image description here

Was it helpful?

Solution

You can set the beans meta property for number to string.

$card->setMeta("cast.number", "string"); 

This will save any values of $card->number as varchar.
See RedBean Internals for more information.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top