2016-06-18 6 views
0

ここは私の関数です。PDO関数の簡素化

この機能を簡略化します。

いずれかお手伝いしますか?

public function showData($table,$fields,$values) 
{ 

     $first = true; 
     $whereClause=null; 
     foreach($fields as $key => $value) 
     { 
      if($first) 
        { 
         $whereClause .= " WHERE $value = '$values[$key]'"; 
         $first = false; 
       } 
       else 
        { 
         $whereClause .= " AND $value = '$values[$key]'"; 
       } 
     } 

     $sql = "SELECT * FROM $table $whereClause"; 
     $q = $this->conn->prepare($sql) or die("failed!"); 
     $q->execute(); 
     while ($r = $q->fetch(PDO::FETCH_ASSOC)) 
     { 
      $data[] = $r; 
     } 
     return $data; 
} 
foreach($ob->showData($tablenm,$field,$val) as $roleval) 
{ 
     //Do Something 
} 

他の方法でこの機能を簡単にすることができます。

お願いします。

答えて

1
public function query($sql, $params = NULL) 
{ 
    $stmt = $this->conn->prepare($sql); 
    $stmt->execute($params) 
    return $stmt; 
} 

$data = $ob->query("SELECT * FROM table WHERE foo = ? AND bar = ?", [$foo, $bar]); 
foreach($data as $roleval) 
{ 
    //Do Something 
} 

この機能は、あなたのものよりも簡単で、より強力で、より柔軟な方法です。あなたのものがであり、SQLインジェクションに本質的かつ不可避的になりがちですが、準備されたステートメントを嘲笑するだけですが、本当にそれを使用していません。

SQLのキーワードは、読みやすさを重視する目的で使用されているため、文章全体を読みやすく、わかりやすく、世界中のすべてのプログラマが理解できるようにする必要があります。そして、あなたはSELECTやWHEREの入力を省くための最初のアイデアがそれほど鮮明ではないことを知ることができます。

さらに、PDOは数多くの異なるリターンフォーマットをサポートしていますが、自分では1つのリターンフォーマットしか使用できません。

あなたは私の記事でさらにYour first database wrapper's childhood diseases

-1
function showData($table, $fields, $values) { 
    if(!(is_array($fields) && is_array($values)) || count($fields) !== count($values)) 
    throw new Exception('Arguments error: "fields" and "values" must be arrays with equal number of elements.'); 

    foreach ($fields as $key => &$field) 
    $field = '`' . str_replace('`', '``', $field) . '` = ' . $this->conn->quote($values[$key]); 

    return 'SELECT * FROM `' . str_replace('`', '``', $table) . (empty($fields) ? '`' : '` WHERE ' . implode(' AND ', $fields)) . ';'; 
} 

テストケースを読むことがあります。もちろん

echo showData('table`name', ['col`1', 'col\`2', 'col\\`3'], ["Tom's cat 1", "Tom's cat 2", "Tom's cat 3"]); 

#output: SELECT * FROM `table``name` WHERE `col``1` = 'Tom\'s cat 1' AND `col\``2` = 'Tom\'s cat 2' AND `col\``3` = 'Tom\'s cat 3'; 

あなたはテスト出力としてそれを返すのではなく、SQLを実行します。