2017-04-21 9 views
0

カラムデータ型が小数点以下(12,2)のmysqlデータベースに10進数値を格納します。PDOを使用してmysqlにlong decimalを格納する

10000と入力しても問題ありません。しかし、100000を保存したい場合、テーブルは値を格納していません。

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の端から誤りがない -

私のコードは、デバッグ出力が

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)" } 

エラー処理である

$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()); 
    } 

ですテーブル内で手動でしかし、私はPDOを介してそれを格納しようとしているとき、エラーはありませんし、同様に行を格納していません。

ご協力いただきまして誠にありがとうございます。レコードの

+0

挿入を実行した後でも、mysqlエラーをチェックしない場合もあります。この方法では、エラーがあったかどうかわからなくても... – Shadow

+0

@Shadow私はコードを更新しました。しかし、実際にはエラーは発生していません。 –

+0

第1位でエラーを投げるようにpdoを構成しましたか? – Shadow

答えて

0

いくつかのコメンターは、クエリの実行から、正確なエラーメッセージを取得することを提案した後、OPがで想定されたよりも、問題は実際には異なる列の範囲外の値を掲載することにより引き起こされたことを発見質問の説明。

関連する問題