Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP извличане на кодове от TextArea и преминаване към Mysql SELECT IN Query

Първо за шаблона:

  • Не се нуждаете от групи за заснемане, просто използвайте \K за да рестартирате съвпадението на целия низ.
  • Бих използвал '[^']*' на първия/празен компонент в единични кавички на вашия входен низ само в случай, че някакъв текст запълни тази позиция.

Относно вашето запитване:

  • Не е безопасно. Не трябва директно да вмъквате предоставени от потребителя данни в заявка от съображения за сигурност.
  • Тук подготвени изявления с ? се използват заместители.
  • Тъй като броят на заместителите/параметрите, които трябва да се обвържат, са променливи, конволюцията на call_user_func_array() е задължително.
  • Имплементирах и bind_result() за подпомагане на обработката на набора от резултати.

Нетестван код:

$_POST['newfeatured']="new myProduct('', 'bbc_609'),
new myProduct('', '35857'),";

if(preg_match_all("/new (?:my|featured)Product\('[^']*', '\K[^']*/",$_POST['newfeatured'],$prd_ids)){
    $params=$prd_ids[0];  // the fullstring matches
    $count=count($params);  // number of fullstring matches
    $csph=implode(',',array_fill(0,$count,'?'));  // comma-separated placeholders

    $query="SELECT A.productid, A.name, A.brand, B.code
            FROM product A
            INNER JOIN price B ON A.productid=B.productid
            WHERE A.productid IN ($csph);";

    $stmt=$mysqli->prepare($query);  // for security reasons

    array_unshift($params,str_repeat('s',$count));  // prepend the type values string
    $ref=[];  // add references
    foreach($params as $i=>$v){
        $ref[$i]=&$params[$i];  // pass by reference as required/advised by the manual
    }
    call_user_func_array([$stmt,'bind_param'],$ref);    

    $stmt->execute();
    $stmt->bind_result($id,$name,$brand,$code);
    while($stmt->fetch()){
        echo "Whatever you want to do with the results: $id, $name, $brand, $code\n";
    }
    $stmt->close();
}else{
    echo "bonk";
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхраняване на социалноосигурителни номера

  2. MySql конектор EF6

  3. Ред на колоните в индекс с няколко колони в MySQL

  4. Използване на JDeveloper с MySQL база данни и Oracle Database на AWS RDS, част 2

  5. TIMESTAMP означава?