忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP PDO 1つずつprepare・bindValueしなくて済む方法
where文を作るとき、検索条件がたくさん設定できると、ひとつずつprepareしてbindValueしてwhereとandで分けて……とやるのがめんどくさい。
そんなときの救世主コード↓

関数定義

function where($names, &$values) {
$wheres = $values = array();
foreach ($names as $name) {
if (isset($_REQUEST[$name]) && is_string($str = $_REQUEST[$name]) && $str !== '') {
$wheres[] = "{$name} = ?";
$values[] = $str;
}
}
return $wheres ? ' WHERE ' . implode(' AND ', $wheres) : '' ;
}



使用例

$pdo = new PDO('DSN', 'USERNAME', 'PASSWORD');
$params = array('name', 'gender', 'address');
$stmt = $pdo->prepare('SELECT * from myTable' . where($params, $values));
$stmt->execute($values);




これはすごい!きれいで便利!

そしてlikeもできる!

関数定義

function where($items, &$values) {
$wheres = $values = array();
foreach ($items as $item) {
$name = $item['name'];
$like = $item['like'];
if (isset($_REQUEST[$name]) && is_string($str = $_REQUEST[$name]) && $str !== '') {
if ($like) {
$wheres[] = "{$name} LIKE ?";
$values[] = '%' . addcslashes($str, '%_\\') . '%' ;
} else {
$wheres[] = "{$name} = ?";
$values[] = $str;
}
}
}
return $wheres ? ' WHERE ' . implode(' AND ', $wheres) : '' ;
}



使用例

$pdo = new PDO('DSN', 'USERNAME', 'PASSWORD');
$params = array(
array(
'name' => 'name',
'like' => FALSE,
),
array(
'name' => 'gender',
'like' => FALSE,
),
array(
'name' => 'address',
'like' => TRUE,
),
);
$stmt = $pdo->prepare('SELECT * from myTable' . where($params, $values));
$stmt->execute($values);




参考URL
http://qiita.com/mpyw/items/c64ce7477169a710f755
- 20 - 19 - 18 - 17 - 16 - 15 - 14
prev  top next
BACKGROUND / tudu*uzu
TEMPLATE / Lenny
忍者ブログ [PR]