この青い夏空の下にはarray_intersect_keyとかaddcslashesとかあるのですよ。。
<?php
use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
require_once 'vendor/autoload.php';
$adapter = new Adapter([
'driver' => 'Mysqli',
'database' => 'foo',
'username' => 'USERNAME',
'password' => 'PASSWORD',
]);
$sql = new Sql($adapter);
// 不特定のキーをもつ配列から特定のキーだけ対象に抽出
$whereSet = array_intersect_key(
array_filter($_REQUEST), // たいていは、どこかのメソッドでの$parametersとかでは
array_fill_keys(['name', 'gender', 'address'], true)
);
equal: // どこのご家庭にもある配列渡しでのバインド
$select = $sql->select('myTable')->where($whereSet);
equal_or_like: //特定の項目だけLIKE検索
$select = $sql->select('myTable')->where(function(Where $where) use ($whereSet) {
foreach ($whereSet as $column => $value) {
if ($column === 'address') {
$where->like($column, '%'.addcslashes($value, '%_\\').'%');
} else {
$where->equalTo($column, $value);
}
}
return $where;
});
$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();
ついスーパーグローバル変数を見てカッとなりました。反省はしません。