使用PDO在mysql中存储长十进制数

时间:2017-04-21 22:12:35

标签: php mysql pdo

我在mysql数据库中存储一个十进制值,其中列数据类型为十进制(12,2)。

如果我输入10000则没关系。但是,如果我想存储100000,则表格不存储该值。

我的代码是

$query = $this->db->insert('donation', array(
            'donation_ref'      => $unique,
            'user_id'           => $data['donorid'],
            'donation_amt'      => $data['amount'],
            'cause_id'          => $data['causes_i_want_to_support'],
            'countrytospend'    => $data['country_to_spend'],
            'donation_type'     => $data['donation_type'],
            'donation_prompt'   => $data['donate_prompt'],
            'gift_aid'          => $data['total'],
            'donation_date'     => date('Y-m-d', strtotime($data['donation_date'])),
            'giftaidyesno'      => $ga,
            'donation_method'   => $data['donation_method']
        ));

public function insert($table, array $data)
    {
        ksort($data);
 $fieldNames = implode('`, `', array_keys($data));
    $fieldValues = ':' . implode(', :', array_keys($data));


        $sth = $this->prepare("INSERT INTO $table (`$fieldNames`) VALUES ($fieldValues)");


        foreach ($data as $key => $value) {
            $sth->bindValue(":$key", $value);
        }

        $sth->execute();
    echo print_r($sth->errorInfo());
    }

调试输出

    Insert prepared
Insert executed
object(PDOStatement)#32 (1) { ["queryString"]=> string(364) "INSERT INTO donation (`cause_id`, `countrytospend`, `donation_amt`, `donation_date`, `donation_method`, `donation_prompt`, `donation_ref`, `donation_type`, `gift_aid`, `giftaidyesno`, `user_id`) VALUES (:cause_id, :countrytospend, :donation_amt, :donation_date, :donation_method, :donation_prompt, :donation_ref, :donation_type, :gift_aid, :giftaidyesno, :user_id)" } 

错误处理 -

public function __construct($type, $host, $databaseName, $username, $password)
    {
        parent::__construct($type.':host='.$host.';dbname='.$databaseName.';charset=utf8', $username, $password);
        $this->exec('SET CHARACTER SET utf8');

        if ($this->debug) {
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        }
    }

    /**
     * Enable/disable debug for database queries.
     * @param $debug boolean TRUE to enable debug, FALSE otherwise.
     */
    public function debug($debug)
    {
        $this->debug = $debug;
    }

mysql end没有错误,因为我可以在表中手动插入相同的值。但是当我试图通过PDO存储它时,没有错误,也没有存储行。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

记录:

在几位评论者建议从查询执行中获得准确的错误消息后,OP发现该问题实际上是由于在问题描述中假设的不同列的值超出范围而引起的。