2016-07-12 19 views
-1

特定の電子メールIDに送信されるパイピング/読み込み電子メールであるPHPクラスをデータベーステーブルに挿入しています。このコードはとてもうまく動作します。しかし今、私は "1011"で始まるメールの本文にあるNumberのリストを抽出し、それをデータベースに照会するために使用したいと考えました。 body($ this-> body)は1011から始まる1つまたは10つの番号を持つことができます。次に、データベースからSELECTに "1011"を使用して、必要な情報を取得して別のテーブルに同じものを挿入します。しかし、これは動作していません。 SELECTクエリを削除すると、 "1011"を自分のテーブルに直接挿入することができます。しかし、まず "1011"を挿入する前に、このパラメーターを選択します。 PLSが私を助けます!抽出番号を使用して番号を抽出してDBを選択

$matches = array(); 
    $pieces = explode(PHP_EOL, $this->body); 
    $matches = preg_grep("/1011/", $pieces); 
    //$results = implode(" | ",array_values($matches)); 
    //echo "Terminal IDs: ".$results." "; 
    foreach ($matches as $columns) 
    { 
    $select = $this->pdo->query("SELECT * FROM tbl_atm_data1 WHERE terminal_id = '$columns' "); 
    $select = $select->fetchAll(); 
    if(count($select) > 0) { 
    foreach($select AS $row) { 
    $this->sol_id =$row['sol_id']; 
    $this->timers =$row['timers']; 
    $this->atm_name=$row['atm_name']; 
    $this->terminal_id =$row['terminal_id']; 

$insertFile = $this->pdo->prepare("INSERT INTO tbl_request_dump1(terminal_id,sol_id,timers,atm_name) VALUES (:terminal_id,:sol_id,:timers,:atm_name)"); 
$insertFile ->bindParam(':terminal_id', $columns); 
$insertFile ->bindParam(':sol_id', $this->sol_id); 
$insertFile ->bindParam(':timers', $this->timers); 
$insertFile ->bindParam(':atm_name', $this->atm_name); 

      $insertFile->execute(); 

} 
}else { 
      echo "No Terminal ID to Need to Save"; 
      die(); 
     } 

} 
+0

これは、より簡単で高速です。「INSERT INTO dump1(...)SELECT ... FROM data1 WHERE ...」です。 1つだけ '実行する'は、フェッチなど、 –

答えて

0

私は私のデータベーステーブルTERMINAL_IDが整数データ型であることに気づいたので、私はそれがうまく動作し整数 に $列を変換しました!

$term=(int)$columns; 
    $select = $this->pdo->query("SELECT * FROM tbl_atm_data1 WHERE terminal_id = '$term'"); 

ありがとうございます!

+0

それは文字列でも正常に動作します。 –

+0

バインディングを使用する。そうしないと、SQLインジェクションに脆弱です。 –

+0

あなたは無数のforループを経由するのではなく、 'where in'を使って呼び出されるクエリの数を減らすことができます。 –

関連する問題