これは機能するはずですか?(ログイン数を増やしますか?)
// update the login count
$data = array(
'logins' => 'logins + 1'
);
$n = $db->update('users', $data, 'user_id = '.$_userId);
これは機能するはずですか?(ログイン数を増やしますか?)
// update the login count
$data = array(
'logins' => 'logins + 1'
);
$n = $db->update('users', $data, 'user_id = '.$_userId);
$data = array(
'logins' => new Zend_Db_Expr('logins + 1')
);
また、引用符を使用して、SQL インジェクションに対して脆弱にならないようにします。
$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));
再コメント: はい。update() メソッドの場合、Zend_Db_Expr 型のオブジェクトを使用しない限り、リテラル値を送信していると見なされます。これを自分でテストできます:
$db->getProfiler()->setEnabled(true);
$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));
$qp = $db->getProfiler()->getLastQueryProfile();
echo $qp->getQuery() . "\n";
配列で指定したリテラル値はすべて$data
パラメーター化されるため、クエリは次のようになります。
UPDATE `users` SET `login` = ? WHERE user_id = 123
クラス Zend_Db_Expr のオブジェクトを使用すると、パラメーター化する代わりに、文字列を文字通りクエリに挿入することが認識されます。
UPDATE `users` SET `login` = NOW() WHERE user_id = 123
このように式を補間する場合は、セキュリティの脆弱性が発生しないように検証する必要があることに注意してください。