2015.
04.
16
01:04:40
うん、まぁ、タイトル通りなのですけどね。
CakePHP1.3のupdateAllメソッドでは、渡した値をクォートで囲んでくれないみたいです。
ついでにサニタイズ処理もやってくれません。
これらの処理は自前でやる必要があります。
というわけで詳細ですが、とあるシステムでこんな処理を書いたのですよφ(--)
「その処理にupdateAll()はいらんだろ!」というツッコミは勘弁してください。
そしたら、なんかエラーになりやがりましたφ(-A-)
「こんちくしょう!」と思いつつ原因を調べたところ、
発行されたSQL文がこんなんなってましたφ(--)
そりゃーエラーになりますわな。
おい!
日付をクォートで囲めよ!(-A-)
ほんで、あれやこれやと調べたところ、どうやらCakePHP1.3のupdateAll()は、
クォートで囲んだりサニタイズ処理を自動でやってくれないらしいです。
自前でやる必要があります。
というわけで、コードこんな感じに書き換えたらφ(--)
発行されるSQL文はこんなんになってφ(--)
無事に処理が進みました。
これは、ちょっと要注意ですね。
updateAll()メソッドを使う際には、自前でクォートで囲んだり
サニタイズ処理をやってあげる必要があります。
クォート囲みはともかく、サニタイズ処理はうっかり忘れる可能性があるので、意識してあげてください。
そんな感じ\(--)/
CakePHP1.3のupdateAllメソッドでは、渡した値をクォートで囲んでくれないみたいです。
ついでにサニタイズ処理もやってくれません。
これらの処理は自前でやる必要があります。
というわけで詳細ですが、とあるシステムでこんな処理を書いたのですよφ(--)
//更新項目
$fields = array(
'送信日時' => date('Y-m-d H:i:s'),
);
//更新条件
$condition = array(
'AND' => array(
'tbl1.id' => $id,
),
);
$this->tbl1Model->updateAll($fields, $condition);
※更新条件は簡略化して書いています。$fields = array(
'送信日時' => date('Y-m-d H:i:s'),
);
//更新条件
$condition = array(
'AND' => array(
'tbl1.id' => $id,
),
);
$this->tbl1Model->updateAll($fields, $condition);
「その処理にupdateAll()はいらんだろ!」というツッコミは勘弁してください。
そしたら、なんかエラーになりやがりましたφ(-A-)
Warning (512): SQL Error: 行 1: '00' の近くに無効な構文があります。 [CORE\cake\libs\model\datasources\dbo_source.php, line 684]
「こんちくしょう!」と思いつつ原因を調べたところ、
発行されたSQL文がこんなんなってましたφ(--)
UPDATE [T_TBL1] SET [M送信日時] = 2015-04-16 00:43:38 WHERE id = ('1')
そりゃーエラーになりますわな。
おい!
日付をクォートで囲めよ!(-A-)
ほんで、あれやこれやと調べたところ、どうやらCakePHP1.3のupdateAll()は、
クォートで囲んだりサニタイズ処理を自動でやってくれないらしいです。
自前でやる必要があります。
というわけで、コードこんな感じに書き換えたらφ(--)
//更新項目
$fields = array(
// '送信日時' => date('Y-m-d H:i:s'),
'送信日時' => "'" . date('Y-m-d H:i:s') . "'",
);
//更新条件
$condition = array(
'AND' => array(
'tbl1.id' => $id,
),
);
$this->tbl1Model->updateAll($fields, $condition);
$fields = array(
// '送信日時' => date('Y-m-d H:i:s'),
'送信日時' => "'" . date('Y-m-d H:i:s') . "'",
);
//更新条件
$condition = array(
'AND' => array(
'tbl1.id' => $id,
),
);
$this->tbl1Model->updateAll($fields, $condition);
発行されるSQL文はこんなんになってφ(--)
UPDATE [T_TBL1] SET [M送信日時] = '2015-04-16 00:43:38' WHERE id = ('1')
無事に処理が進みました。
これは、ちょっと要注意ですね。
updateAll()メソッドを使う際には、自前でクォートで囲んだり
サニタイズ処理をやってあげる必要があります。
クォート囲みはともかく、サニタイズ処理はうっかり忘れる可能性があるので、意識してあげてください。
そんな感じ\(--)/
category:CakePHP1.3系 thema:システム開発 - genre:コンピュータ Posted by ササキマコト