PDOを利用してMySQLにUpdateをexecuteした時、型が異なる場合でもエラーは出ないのでしょうか?
以下のDB構成があります。
PROD_CODE varchar(7)
WEST_BC int(11)
このテーブルの'WEST_BC'に対して'aaaa'の様な文字をセットしても、
エラーにはならず、'WEST_BC'の値が'0'になってしまいます。
ここで言うエラーは下記の$flagがtrueかfalseかです。結果、trueになります。
lang
1$flag = $stmt ->execute();
PHPMyadminで手動で同様のUpdateを実行すると、型が違う旨のエラーがでます。
PDOを利用した時、型が違ったものでもエラーとして取り扱われないのでしょうか?
以下にコードを掲載させて頂きます。ご教授頂ますようお願いします。
lang
1<?php 2 //DB接続 3 $dsn = "mysql:dbname=" . DB_NAME . ";host=" . DB_SERVER . ";charset=utf8"; 4 $username = DB_USER; 5 $password = DB_PASS; 6 7 //DB接続開始 8 try{ 9 $pdo = new PDO($dsn, $username, $password); 10 $pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 11 12 $pdo ->beginTransaction(); //トランザクション開始 13 $fp = fopen($csvFullPath, 'r'); //CSVファイル読み込み 14 //UPDATE用Query 15 $sql = 'UPDATE STOCK SET WEST_BC = :west_bc 16 WHERE PROD_CODE = :prod_code'; 17 18 $stmt = $pdo ->prepare($sql); 19 20 while ($ret_csv = fgetcsv($fp)){ 21 $stmt -> bindvalue(':prod_code', $ret_csv[0], PDO::PARAM_STR); 22 $stmt -> bindValue(':west_bc', $ret_csv[1], PDO::PARAM_INT); 23 24 //execute [$flgは成功True 失敗Flaseが入る。多分] 25 $flag = $stmt ->execute(); 26 27 if (!$flag) { 28 $info = $stmt ->errorInfo(); 29 print($ret_csv[0] . '---' . $info[0] . '---' . $info[2] . 30 '---' . $info[1] . "<BR>"); 31 } 32 //結果描画 33 print($ret_csv[0] . "--" . $stmt ->rowCount() . "<BR>"); 34 } 35 36 fclose($fp); 37 38 } catch (Exception $ex) { 39 $pdo ->rollBack(); 40 print('failed:' . $ex->getMessage() . '<BR> ロールバック済み'); 41 exit(); 42 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/12 01:06